#include <bits/stdc++.h>
using namespace std;
struct v3 {
  long long v[3];
  v3() {}
  v3(long long x, long long y, long long z) {
    v[0] = x;
    v[1] = y;
    v[2] = z;
  }
  v3 operator-(const v3 &a) const {
    return v3(v[0] - a.v[0], v[1] - a.v[1], v[2] - a.v[2]);
  }
  inline long long sqlen() const {
    return v[0] * v[0] + v[1] * v[1] + v[2] * v[2];
  }
};
vector<v3> g(8);
bool isCube() {
  map<long long, int> k;
  for (int i = 0; i < 8; ++i) {
    for (int j = i + 1; j < 8; ++j) {
      k[(g[i] - g[j]).sqlen()]++;
      if (k.size() > 3) return false;
    }
  }
  if (k.size() != 3) return false;
  map<long long, int>::iterator it = k.begin(), it1 = k.begin(),
                                it2 = k.begin();
  it1++;
  it2++;
  it2++;
  if (it->first * 2 == it1->first && it->first * 3 == it2->first &&
      it->second == 12 && it1->second == 12 && it2->second == 4)
    return true;
  return false;
}
int main() {
  for (int i = 0; i < 8; ++i) {
    cin >> g[i].v[0] >> g[i].v[1] >> g[i].v[2];
  }
  for (int i = 0; i < 8; ++i) {
    sort(g[i].v, g[i].v + 3);
  }
  do {
    do {
      do {
        do {
          do {
            do {
              do {
                if (isCube()) {
                  cout << "YES" << endl;
                  for (int i = 0; i < 8; ++i) {
                    cout << g[i].v[0] << " " << g[i].v[1] << " " << g[i].v[2]
                         << endl;
                  }
                  return 0;
                }
              } while (next_permutation(g[0].v, g[0].v + 3));
            } while (next_permutation(g[1].v, g[1].v + 3));
          } while (next_permutation(g[2].v, g[2].v + 3));
        } while (next_permutation(g[3].v, g[3].v + 3));
      } while (next_permutation(g[4].v, g[4].v + 3));
    } while (next_permutation(g[5].v, g[5].v + 3));
  } while (next_permutation(g[6].v, g[6].v + 3));
  cout << "NO" << endl;
  return 0;
}
