#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y, z;
  point(int new_x = 0, int new_y = 0, int new_z = 0) {
    x = new_x;
    y = new_y;
    z = new_z;
  }
  friend ostream &operator<<(ostream &os, point &p) {
    return os << p.x << " " << p.y << " " << p.z;
  }
  friend istream &operator>>(istream &is, point &p) {
    return is >> p.x >> p.y >> p.z;
  }
  point operator=(point p) {
    x = p.x;
    y = p.y;
    z = p.z;
    return point(x, y, z);
  }
};
point cube[8];
int shift[6][3];
int mas[100];
int mat[8][3];
bool done = false;
long long int dist[8][8];
bool solve();
void per(int n) {
  for (int i = 0; i < n; i++) {
    mas[i] = i;
    shift[0][i] = mas[i];
  }
  bool ok = true;
  int t = 0;
  while (ok) {
    t++;
    int l = n - 1;
    while (mas[l] < mas[l - 1]) {
      l--;
      if (l == 0) {
        ok = false;
        break;
      }
    }
    if (ok) {
      int h = l - 1;
      int minn = mas[l];
      for (int j = l + 1; j < n; j++)
        if (mas[j] > mas[h] && mas[j] < minn) {
          minn = mas[j];
          l = j;
        }
      swap(mas[h], mas[l]);
      l = h + 1;
      for (int i = 0, m = n - 1; i < (n - h - 1) / 2; i++, m--, l++)
        swap(mas[l], mas[m]);
      for (int i = 0; i < n; i++) shift[t][i] = mas[i];
    }
  }
}
void perebor(int k) {
  if (done) return;
  if (k == 8) {
    bool ok = solve();
    if (ok) {
      cout << "YES" << endl;
      for (int i = 0; i < 8; i++) cout << cube[i] << endl;
      done = true;
      return;
    }
  } else
    for (int i = 0; i < 6; i++) {
      cube[k].x = mat[k][shift[i][0]];
      cube[k].y = mat[k][shift[i][1]];
      cube[k].z = mat[k][shift[i][2]];
      perebor(k + 1);
    }
}
long long int sq(long long int a) { return (a * a); }
bool solve() {
  int count = 0;
  for (int i = 0; i < 8; i++) {
    for (int j = 0; j < 8; j++)
      if (i != j)
        dist[i][j] = sq(cube[i].x - cube[j].x) + sq(cube[i].y - cube[j].y) +
                     sq(cube[i].z - cube[j].z);
      else
        dist[i][j] = -1;
    sort(dist[i], dist[i] + 8);
    if (dist[i][1] == dist[i][2] && dist[i][2] == dist[i][3] &&
        dist[i][4] == dist[i][5] && dist[i][5] == dist[i][6] &&
        dist[i][6] != dist[i][7])
      count++;
  }
  if (count == 8)
    return true;
  else
    return false;
}
int main() {
  per(3);
  for (int i = 0; i < 8; i++) {
    cin >> cube[i];
    mat[i][0] = cube[i].x;
    mat[i][1] = cube[i].y;
    mat[i][2] = cube[i].z;
  }
  perebor(1);
  if (!done) cout << "NO" << endl;
  return 0;
}
