#include <bits/stdc++.h>
using namespace std;
int a[8][3];
struct point {
  int x, y, z;
  friend bool operator<(const point a, const point b) {
    if (a.x != b.x)
      return a.x < b.x;
    else if (a.y != b.y)
      return a.y < b.y;
    else
      return a.z < b.z;
  }
  friend bool operator==(const point a, const point b) {
    if (a.x == b.x && a.y == b.y && a.z == b.z)
      return true;
    else
      return false;
  }
};
void input() {
  for (int i = 0; i < 8; i++) {
    cin >> a[i][0] >> a[i][1] >> a[i][2];
    sort(a[i], a[i] + 3);
  }
}
long long dis(int c[3], int b[3]) {
  long long d;
  d = ((long long)c[0] - b[0]) * ((long long)c[0] - b[0]) +
      ((long long)c[1] - b[1]) * ((long long)c[1] - b[1]) +
      ((long long)c[2] - b[2]) * ((long long)c[2] - b[2]);
  return d;
}
bool solve() {
  int count = 0;
  do {
    do {
      do {
        do {
          do {
            do {
              do {
                do {
                  point p[10];
                  long long d[8];
                  int flag = 1;
                  for (int i = 0; i < 8; i++) {
                    p[i].x = a[i][0];
                    p[i].y = a[i][1];
                    p[i].z = a[i][2];
                  }
                  sort(p, p + 8);
                  for (int i = 0; i < 7; i++) {
                    if (p[i] == p[i + 1]) {
                      flag = 0;
                      break;
                    }
                  }
                  if (flag == 0) continue;
                  for (int i = 0; i < 7; i++) {
                    d[i] = dis(a[0], a[1 + i]);
                  }
                  sort(d, d + 7);
                  if (d[0] == 0 || d[0] != d[1] || d[1] != d[2] ||
                      d[3] != d[4] || d[4] != d[5]) {
                    continue;
                  }
                  double D = 1.0 * d[3] / d[0];
                  if (fabs(D - 2) > 1e-6) continue;
                  D = 1.0 * d[6] / d[0];
                  if (fabs(D - 3) > 1e-6) continue;
                  int k = 1, cnt = 0;
                  if (dis(a[k], a[0]) > d[5]) k++;
                  for (int i = 0; i < 8; i++) {
                    if (k != i) d[cnt++] = dis(a[k], a[i]);
                  }
                  sort(d, d + 7);
                  if (d[0] == 0 || d[0] != d[1] || d[1] != d[2] ||
                      d[3] != d[4] || d[4] != d[5]) {
                    continue;
                  }
                  D = 1.0 * d[3] / d[0];
                  if (fabs(D - 2) > 1e-6) continue;
                  D = 1.0 * d[6] / d[0];
                  if (fabs(D - 3) > 1e-6) continue;
                  if (flag == 1) return true;
                } while (next_permutation(a[7], a[7] + 3));
              } while (next_permutation(a[6], a[6] + 3));
            } while (next_permutation(a[5], a[5] + 3));
          } while (next_permutation(a[4], a[4] + 3));
        } while (next_permutation(a[3], a[3] + 3));
      } while (next_permutation(a[2], a[2] + 3));
    } while (next_permutation(a[1], a[1] + 3));
  } while (next_permutation(a[0], a[0] + 3));
  return false;
}
int main() {
  input();
  bool f = solve();
  if (f) {
    cout << "YES" << endl;
    for (int i = 0; i < 8; i++) {
      cout << a[i][0] << " " << a[i][1] << " " << a[i][2] << endl;
    }
  } else
    cout << "NO" << endl;
  return 0;
}
