#include <bits/stdc++.h>
using namespace std;
void loadData(void);
int proc(void);
void printRes(int);
int n;
map<int, int> rmap;
set<pair<int, int> > r_rpset;
int res[50000][3];
bool lyb_debug = false;
int main(int argc, char** argv) {
  loadData();
  printRes(proc());
  return 0;
}
int proc(void) {
  for (map<int, int>::iterator iter = rmap.begin(); iter != rmap.end();
       iter++) {
    r_rpset.insert(make_pair(iter->second, iter->first));
  }
  int index = 0;
  vector<pair<int, int> > possibleDelVec;
  while (r_rpset.size() >= 3) {
    possibleDelVec.clear();
    for (int i = 0; i < 3; i++) {
      set<pair<int, int> >::iterator iter = --r_rpset.end();
      res[index][i] = iter->second;
      possibleDelVec.push_back(*iter);
      r_rpset.erase(iter);
    }
    for (int i = 0; i < possibleDelVec.size(); i++)
      if (--possibleDelVec[i].first) r_rpset.insert(possibleDelVec[i]);
    sort(res[index], res[index] + 3);
    index++;
  }
  return index;
}
void loadData(void) {
  scanf("%d", &n);
  int r;
  for (int i = 0; i < n; i++) {
    scanf("%d", &r);
    if (rmap.find(r) == rmap.end()) {
      rmap[r] = 1;
    } else {
      rmap[r]++;
    }
  }
  return;
}
void printRes(int num) {
  printf("%d\n", num);
  for (int i = 0; i < num; i++) {
    printf("%d %d %d\n", res[i][2], res[i][1], res[i][0]);
  }
  return;
}
