#include <bits/stdc++.h>
long long getSquareDistance(std::vector<long long> &first,
                            std::vector<long long> &second) {
  long long squareDistance = 0l;
  for (int i = 0; i < first.size(); ++i) {
    squareDistance += (first[i] - second[i]) * (first[i] - second[i]);
  }
  return squareDistance;
}
bool isCube(std::vector<std::vector<long long>> &coordinates) {
  std::vector<long long> squareDistances;
  squareDistances.reserve(28);
  for (int i = 0; i < 7; ++i) {
    for (int j = i + 1; j < 8; ++j) {
      squareDistances.push_back(
          getSquareDistance(coordinates[i], coordinates[j]));
    }
  }
  std::map<long long, int> distancesCounts;
  for (auto d : squareDistances) {
    if (distancesCounts.find(d) == distancesCounts.end()) {
      if (distancesCounts.size() == 3) {
        return false;
      } else {
        distancesCounts[d] = 1;
      }
    } else {
      ++distancesCounts[d];
    }
  }
  if (distancesCounts.size() != 3) {
    return false;
  }
  for (auto d : distancesCounts) {
    if (d.second != 12 && d.second != 4) {
      return false;
    }
  }
  return true;
}
int main() {
  std::ios_base::sync_with_stdio(false);
  std::vector<std::vector<long long>> cubePermutation(
      8, std::vector<long long>(3, 0));
  for (int i = 0; i < 8; ++i) {
    for (int j = 0; j < 3; ++j) {
      std::cin >> cubePermutation[i][j];
    }
  }
  for (int i = 0; i < 8; ++i) {
    std::sort(cubePermutation[i].begin(), cubePermutation[i].end());
  }
  bool canRestoreCube = false;
  for (int i1 = 0; i1 < 6 && !canRestoreCube; ++i1) {
    for (int i2 = 0; i2 < 6 && !canRestoreCube; ++i2) {
      for (int i3 = 0; i3 < 6 && !canRestoreCube; ++i3) {
        for (int i4 = 0; i4 < 6 && !canRestoreCube; ++i4) {
          for (int i5 = 0; i5 < 6 && !canRestoreCube; ++i5) {
            for (int i6 = 0; i6 < 6 && !canRestoreCube; ++i6) {
              for (int i7 = 0; i7 < 6 && !canRestoreCube; ++i7) {
                if (isCube(cubePermutation)) {
                  canRestoreCube = true;
                } else {
                  std::next_permutation(cubePermutation[7].begin(),
                                        cubePermutation[7].end());
                }
              }
              if (!canRestoreCube) {
                std::next_permutation(cubePermutation[6].begin(),
                                      cubePermutation[6].end());
              }
            }
            if (!canRestoreCube) {
              std::next_permutation(cubePermutation[5].begin(),
                                    cubePermutation[5].end());
            }
          }
          if (!canRestoreCube) {
            std::next_permutation(cubePermutation[4].begin(),
                                  cubePermutation[4].end());
          }
        }
        if (!canRestoreCube) {
          std::next_permutation(cubePermutation[3].begin(),
                                cubePermutation[3].end());
        }
      }
      if (!canRestoreCube) {
        std::next_permutation(cubePermutation[2].begin(),
                              cubePermutation[2].end());
      }
    }
    if (!canRestoreCube) {
      std::next_permutation(cubePermutation[1].begin(),
                            cubePermutation[1].end());
    }
  }
  if (canRestoreCube) {
    std::cout << "YES\n";
    for (int i = 0; i < 8; ++i) {
      for (int j = 0; j < 3; ++j) {
        std::cout << cubePermutation[i][j] << " ";
      }
      std::cout << "\n";
    }
  } else {
    std::cout << "NO";
  }
  return 0;
}
