#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const int INF = ((1 << 31) - 1);
const long long LLINF = (((1LL << 63) - 1LL));
const long double EPS = 1e-9;
pair<int, int> get(set<pair<int, int> >& S) {
  set<pair<int, int> >::iterator it = S.end();
  --it;
  pair<int, int> res = *it;
  S.erase(it);
  return res;
}
int main() {
  int n;
  cin >> n;
  map<int, int> M;
  for (int i = 0; i < n; ++i) {
    int x;
    scanf("%d", &x);
    ++M[x];
  }
  set<pair<int, int> > S;
  for (map<int, int>::iterator it = M.begin(); it != M.end(); ++it) {
    pair<int, int> cur = *it;
    S.insert(pair<int, int>(cur.second, cur.first));
  }
  vector<vector<int> > res;
  res.reserve(34000);
  while (S.size() >= 3) {
    vector<pair<int, int> > v;
    v.push_back(get(S));
    v.push_back(get(S));
    v.push_back(get(S));
    vector<int> add;
    add.reserve(3);
    for (int i = 0; i < v.size(); ++i) {
      add.push_back(v[i].second);
      --v[i].first;
      if (v[i].first) {
        S.insert(v[i]);
      }
    }
    res.push_back(add);
  }
  cout << res.size() << endl;
  for (int i = 0; i < res.size(); ++i) {
    sort((res[i]).begin(), (res[i]).end());
    reverse((res[i]).begin(), (res[i]).end());
    for (int j = 0; j < res[i].size(); ++j) {
      printf("%d ", res[i][j]);
    }
    printf("\n");
  }
  return 0;
}
