func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int gi() {     char c = getchar();     while (c <  0  || c >  9 ) c = getchar();     int sum = 0;     while ( 0  <= c && c <=  9 ) sum = sum * 10 + c - 48, c = getchar();     return sum;   }   const int maxn = 100005;   int n, a[maxn], cnt[maxn], p[maxn][3], val[maxn];   priority_queue<pair<int, int>> que;   int main() {     n = gi();     for (int i = 1; i <= n; ++i) a[i] = gi();     sort(a + 1, a + n + 1);     for (int i = 1, m = 0, lst = -1; i <= n; ++i)       if (a[i] == lst)         ++cnt[m];       else         lst = a[i], ++m, val[m] = a[i], ++cnt[m];     for (int i = 1; i <= n; ++i)       if (cnt[i]) que.push(make_pair(cnt[i], val[i]));     pair<int, int> x, y, z;     int ans = 0;     while (que.size() >= 3) {       x = que.top();       que.pop();       y = que.top();       que.pop();       z = que.top();       que.pop();       ++ans;       p[ans][0] = x.second;       p[ans][1] = y.second;       p[ans][2] = z.second;       sort(p[ans], p[ans] + 3, greater<int>());       if (x.first > 1) --x.first, que.push(x);       if (y.first > 1) --y.first, que.push(y);       if (z.first > 1) --z.first, que.push(z);     }     printf( %d n , ans);     for (int i = 1; i <= ans; ++i)       printf( %d %d %d n , p[i][0], p[i][1], p[i][2]);     return 0;   }   