#include <bits/stdc++.h>
using namespace std;
const int MAXN = 404040;
int n, a[MAXN], cnt[MAXN];
map<int, int> mp;
vector<int> occ[MAXN];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    mp[a[i]] += 1;
  }
  for (auto g : mp) {
    occ[g.second].push_back(g.first);
    cnt[g.second]++;
  }
  pair<int, int> cho = {0, 0};
  int sum = n, suf = 0;
  for (int sh = n; sh > 0; --sh) {
    if (sum / sh >= sh && sum / sh * sh > cho.first * cho.second)
      cho = {sh, sum / sh};
    suf += cnt[sh];
    sum -= suf;
  }
  printf("%d\n%d %d\n", cho.first * cho.second, cho.first, cho.second);
  vector<vector<int> > ans(cho.first, vector<int>(cho.second, -1));
  int cr = 0, cp = 0;
  for (int t = n; t > 0; --t) {
    for (auto val : occ[t]) {
      for (int i = 1; i <= min(t, cho.first); ++i) {
        ans[cp][(cr + cp) % cho.second] = val;
        if (++cp == cho.first) cr++, cp = 0;
      }
    }
  }
  for (auto row : ans) {
    for (auto x : row) printf("%d ", x);
    printf("\n");
  }
  return 0;
}
