#include <bits/stdc++.h>
using namespace std;
bool cmp(pair<int, long long> a, pair<int, long long> b) {
  if (b.second < a.second)
    return true;
  else
    return false;
}
int main() {
  int t;
  int res = 0;
  cin >> t;
  vector<long long> a(t);
  vector<pair<int, long long> > tcnt;
  vector<pair<int, pair<int, int> > > ans;
  for (int i = 0; i < t; i++) cin >> a[i];
  sort((a).begin(), (a).end());
  tcnt.push_back(make_pair(1, a[0]));
  int pos = 0;
  for (int i = 1; i < a.size(); i++) {
    if (a[i] == a[i - 1])
      tcnt[pos].first++;
    else {
      tcnt.push_back(make_pair(1, a[i]));
      pos++;
    }
  }
  priority_queue<pair<int, long long> > cnt((tcnt).begin(), (tcnt).end());
  while (cnt.size() >= 3) {
    vector<pair<int, long long> > p;
    p.push_back(cnt.top());
    cnt.pop();
    p.push_back(cnt.top());
    cnt.pop();
    p.push_back(cnt.top());
    cnt.pop();
    sort((p).begin(), (p).end(), cmp);
    ans.push_back(make_pair(p[0].second, make_pair(p[1].second, p[2].second)));
    res++;
    p[0].first--;
    p[1].first--;
    p[2].first--;
    if (p[2].first > 0) cnt.push(p[2]);
    if (p[1].first > 0) cnt.push(p[1]);
    if (p[0].first > 0) cnt.push(p[0]);
  }
  cout << res << endl;
  for (int i = 0; i < ans.size(); i++)
    cout << ans[i].first << " " << ans[i].second.first << " "
         << ans[i].second.second << endl;
  return 0;
}
