#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 123;
int a[maxn];
vector<int> v;
struct node {
  int data;
  int num;
} Hash[maxn], heap[maxn];
int Hashnum, heapnum;
int twopoint(int left, int right, int k) {
  int l = left, r = right;
  while (l <= r) {
    int mid = (l + r) / 2;
    if (Hash[mid].data == k)
      return mid;
    else if (Hash[mid].data > k)
      r = mid - 1;
    else
      l = mid + 1;
  }
  return -1;
}
void push(struct node p) {
  if (p.num == 0) return;
  heapnum++;
  heap[heapnum] = p;
  int big = heapnum;
  while (big != 1) {
    int small = big / 2;
    if (heap[small].num >= heap[big].num) return;
    swap(heap[small], heap[big]);
    big = small;
  }
}
struct node get() {
  struct node m = heap[1];
  heap[1] = heap[heapnum];
  heapnum--;
  int small = 1;
  while (small <= heapnum / 2) {
    int big = small * 2;
    if (big < heapnum && heap[big].num < heap[big + 1].num) big++;
    if (heap[small].num >= heap[big].num) return m;
    swap(heap[small], heap[big]);
    small = big;
  }
  return m;
}
int main() {
  int n, i;
  while (scanf("%d", &n) != EOF) {
    heapnum = 0;
    Hashnum = 0;
    v.clear();
    for (i = 1; i <= n; i++) Hash[i].data = Hash[i].num = 0;
    for (i = 1; i <= n; i++) scanf("%d", &a[i]);
    sort(a + 1, a + n + 1);
    for (i = 1; i <= n; i++) {
      int mid = twopoint(1, Hashnum, a[i]);
      if (mid == -1) {
        Hash[++Hashnum].data = a[i];
        Hash[Hashnum].num = 1;
      } else
        Hash[mid].num++;
    }
    for (i = 1; i <= Hashnum; i++) push(Hash[i]);
    while (heapnum >= 3) {
      struct node p1, p2, p3;
      p1 = get();
      p2 = get();
      p3 = get();
      int aa[3];
      aa[0] = p1.data, aa[1] = p2.data, aa[2] = p3.data;
      sort(aa, aa + 3);
      v.push_back(aa[2]);
      v.push_back(aa[1]);
      v.push_back(aa[0]);
      p1.num--;
      p2.num--;
      p3.num--;
      push(p1);
      push(p2);
      push(p3);
    }
    printf("%d\n", v.size() / 3);
    for (i = 0; i < v.size(); i++) {
      if (i % 3 == 2)
        printf("%d\n", v[i]);
      else
        printf("%d ", v[i]);
    }
  }
  return 0;
}
