#include <bits/stdc++.h>
using namespace std;
int r[100010];
struct Node {
  Node(int _r = 0, int _cnt = 0) : r(_r), cnt(_cnt) {}
  int r;
  int cnt;
};
bool operator<(const Node& a, const Node& b) { return a.cnt < b.cnt; }
struct Res {
  int a[3];
  int n;
};
Res res[35000];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &r[i]);
  sort(&r[0], &r[n]);
  priority_queue<Node> q;
  int begin = 0;
  for (int i = 1; i < n; i++) {
    if (r[i] != r[begin]) {
      q.push(Node(r[begin], i - begin));
      begin = i;
    }
  }
  q.push(Node(r[begin], n - begin));
  int nres = 0, total = 0;
  while (q.size() >= 3) {
    Node n[3];
    for (int i = 0; i < 3; i++) {
      n[i] = q.top();
      q.pop();
    }
    int temp = 1;
    for (int i = 0; i < 3; i++) {
      res[nres].a[i] = n[i].r;
      n[i].cnt -= temp;
      if (n[i].cnt > 0) q.push(n[i]);
    }
    sort(res[nres].a, res[nres].a + 3);
    res[nres].n = temp;
    total += temp;
    nres++;
  }
  printf("%d\n", total);
  for (int i = 0; i < nres; i++) {
    for (int j = 0; j < res[i].n; j++)
      printf("%d %d %d\n", res[i].a[2], res[i].a[1], res[i].a[0]);
  }
  return 0;
}
