#include <bits/stdc++.h>
using namespace std;
vector<pair<int, int>> v;
int n, a[400040], p, q;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", a + i);
  sort(a, a + n);
  for (int i = 0, cur = 1; i < n; i++, cur++)
    if (a[i] != a[i + 1]) v.emplace_back(cur, a[i]), cur = 0;
  sort(v.begin(), v.end(), greater<pair<int, int>>());
  for (int h = 1; h * h <= n; h++) {
    int m = 0;
    for (pair<int, int> &p : v)
      for (int i = 0; i < min(h, p.first); i++) a[m++] = p.second;
    if (m / h >= h && m / h * h >= p * q) p = h, q = m / h;
  }
  if (p > q) swap(p, q);
  vector<vector<int>> g(p, vector<int>(q));
  for (auto &x : v) x.first = min(x.first, p);
  for (int i = 0, j, k = 0, m = 0; i < p * q; i++, j++) {
    if (v[k].first == 0) k++;
    if (i % p == 0) j = m++;
    g[i % p][j % q] = v[k].second;
    v[k].first--;
  }
  printf("%d\n%d %d\n", p * q, p, q);
  for (int i = 0; i < p; i++) {
    for (int j = 0; j < q; j++) printf("%d ", g[i][j]);
    puts("");
  }
}
