#include <bits/stdc++.h>
using namespace std;
int n, a[100100];
map<int, int> m;
int mi(int a, int b, int c) { return min(min(a, b), c); }
int mx(int a, int b, int c) { return max(max(a, b), c); }
int md(int a, int b, int c) {
  return 0LL + a + b + c - mi(a, b, c) - mx(a, b, c);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    m[a[i]]++;
  }
  a[0] = a[1];
  sort(a + 1, a + n + 1);
  int n3 = n / 3;
  n3 += n % 3;
  int p1 = 0, p2 = 0;
  for (auto p : m) {
    if (p.second >= n / 3) {
      if (p1 == 0)
        p1 = p.first;
      else
        p2 = p.first;
    }
  }
  if (p2 == 0 && p1 == 0) {
    cout << n / 3 << '\n';
    for (int i = 1, j = n / 3 + 1, k = 2 * n / 3 + 1; i <= n / 3;
         i++, j++, k++) {
      cout << a[k] << ' ' << a[j] << ' ' << a[i] << '\n';
    }
    return 0;
  }
  if (p2 == 0 && p1 != 0) {
    vector<pair<int, pair<int, int> > > ans;
    priority_queue<pair<int, int> > v;
    map<int, int> use;
    for (int i = 1; i <= n; i++)
      if (a[i] != p1 && use[a[i]] == 0) v.push({m[a[i]], a[i]}), use[a[i]]++;
    while (v.size() > 1) {
      int x1 = v.top().second;
      v.pop();
      m[x1]--;
      int x2 = v.top().second;
      v.pop();
      m[x2]--;
      if (m[x1] > 0) v.push({m[x1], x1});
      if (m[x2] > 0) v.push({m[x2], x2});
      ans.push_back({mx(p1, x1, x2), {md(p1, x1, x2), mi(p1, x1, x2)}});
      if (ans.size() == n / 3) break;
    }
    cout << ans.size() << '\n';
    for (int i = 0; i < ans.size(); i++) {
      cout << ans[i].first << ' ' << ans[i].second.first << ' '
           << ans[i].second.second << '\n';
    }
  }
  if (p2 != 0) {
    vector<pair<int, pair<int, int> > > ans;
    for (int i = 1; i <= n; i++) {
      if (a[i] != p1 && a[i] != p2) {
        ans.push_back({mx(p1, p2, a[i]), {md(p1, p2, a[i]), mi(p1, p2, a[i])}});
        if (ans.size() == n / 3) break;
      }
    }
    cout << ans.size() << '\n';
    for (int i = 0; i < ans.size(); i++) {
      cout << ans[i].first << ' ' << ans[i].second.first << ' '
           << ans[i].second.second << '\n';
    }
  }
}
