#include <bits/stdc++.h>
using namespace std;
struct P {
  int x, y;
  bool operator<(const struct P& p) const { return p.y > y; }
};
int T, m, n, q, w, mi, ma, cnt, s, t, fi, cc, e, r, z, x, an;
int a[100010];
priority_queue<P> qq;
int b[50000][3];
int main() {
  scanf("%d", &m);
  for (int i = 0; i < m; i++) scanf("%d", &a[i]);
  sort(a, a + m);
  a[m] = -1;
  cnt = 1;
  for (int i = 0; i < m; i++) {
    if (a[i] != a[i + 1]) {
      P tmp;
      tmp.x = a[i];
      tmp.y = cnt;
      cnt = 1;
      qq.push(tmp);
    } else {
      cnt++;
    }
  }
  an = 0;
  while (qq.size() >= 3) {
    P t1, t2, t3;
    t1 = qq.top();
    qq.pop();
    t2 = qq.top();
    qq.pop();
    t3 = qq.top();
    qq.pop();
    if (t1.y > 1) {
      P tmp;
      tmp.x = t1.x;
      tmp.y = t1.y - 1;
      qq.push(tmp);
    }
    if (t2.y > 1) {
      P tmp;
      tmp.x = t2.x;
      tmp.y = t2.y - 1;
      qq.push(tmp);
    }
    if (t3.y > 1) {
      P tmp;
      tmp.x = t3.x;
      tmp.y = t3.y - 1;
      qq.push(tmp);
    }
    b[an][0] = t1.x;
    b[an][1] = t2.x;
    b[an][2] = t3.x;
    sort(b[an], b[an] + 3);
    an++;
  }
  printf("%d\n", an);
  for (int i = 0; i < an; i++) printf("%d %d %d\n", b[i][2], b[i][1], b[i][0]);
  return 0;
}
