#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
struct node {
  int f, s, t;
} no[N];
struct ball {
  int ra, num;
  bool operator<(const ball& o) const { return num < o.num; }
} ba;
map<int, int> r;
map<int, int>::iterator it;
priority_queue<ball> qu;
int main(void) {
  int n, ra;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &ra);
    r[ra]++;
  }
  int cnt = 0;
  for (it = r.begin(); it != r.end(); ++it) {
    ba.ra = it->first;
    ba.num = it->second;
    qu.push(ba);
  }
  while (!qu.empty()) {
    ball a, b, c;
    a = qu.top(), qu.pop();
    if (!qu.empty())
      b = qu.top(), qu.pop();
    else
      break;
    if (!qu.empty())
      c = qu.top(), qu.pop();
    else
      break;
    int ma = max(max(a.ra, b.ra), c.ra);
    int mi = min(min(a.ra, b.ra), c.ra);
    int mid = a.ra + b.ra + c.ra - ma - mi;
    cnt++;
    no[cnt].f = ma, no[cnt].s = mid, no[cnt].t = mi;
    a.num--;
    if (a.num) qu.push(a);
    b.num--;
    if (b.num) qu.push(b);
    c.num--;
    if (c.num) qu.push(c);
  }
  cout << cnt << endl;
  for (int i = 1; i <= cnt; ++i)
    cout << no[i].f << " " << no[i].s << " " << no[i].t << endl;
  return 0;
}
