#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int maxn = 1e5 + 9;
const int inf = 100000009;
const int mod = 10007;
pair<int, int> op[maxn];
struct node {
  int num;
  int kl[3];
} pq[maxn];
int main() {
  int n;
  cin >> n;
  map<int, int> tmp;
  tmp.clear();
  int cnt = 0;
  for (int i = 0; i < n; ++i) {
    int jk, pos;
    scanf("%d", &jk);
    if (tmp.count(jk))
      pos = tmp[jk];
    else
      pos = cnt, tmp[jk] = cnt++;
    op[pos].first++;
    op[pos].second = jk;
  }
  priority_queue<pair<int, int> > jk;
  while (!jk.empty()) jk.pop();
  int io = maxn;
  for (int i = 0; i < cnt; ++i) jk.push(op[i]), io = min(io, op[i].first);
  int num = 0;
  while (!jk.empty()) {
    pair<int, int> hj[3];
    int fg = 1;
    for (int i = 0; i < 3; ++i) {
      if (jk.empty()) {
        fg = 0;
        break;
      }
      hj[i] = jk.top();
      jk.pop();
    }
    if (!fg) break;
    for (int i = 0; i < 3; ++i) pq[num].kl[i] = hj[i].second;
    sort(pq[num].kl, pq[num].kl + 3);
    pq[num++].num = 1;
    for (int i = 0; i < 3; ++i) {
      hj[i].first -= 1;
      if (hj[i].first) jk.push(hj[i]);
    }
  }
  int gh = 0;
  for (int i = 0; i < num; ++i) gh += pq[i].num;
  cout << gh << endl;
  for (int i = 0; i < num; ++i) {
    for (int j = 0; j < pq[i].num; ++j) {
      for (int k = 2; k >= 0; --k) {
        printf("%d ", pq[i].kl[k]);
      }
      puts("");
    }
  }
  return 0;
}
