#include<iostream>#include<istream>#include<sstream>#include<vector>#include<stack>#include<list>#include<map>#include<set>#include<deque>#include<queue>#include<cstring>#include<unordered_map>#include<unordered_set>#include<algorithm>#include<numeric>#include<chrono>#include<ctime>#include<cmath>#include<cctype>#include<string>#include<cstdio>#include<iomanip>#include<thread>#include<mutex>#include<condition_variable>#include<functional>#include<iterator>usingnamespace std;constint maxn =10007;int n,m;
vector<int> ans[maxn];
map<int,int> mmp;intmain(){while(cin >> n && n){int input,num =0;
mmp.clear();for(int i =0; i < n; i++){
cin >> input;
mmp[input]++;if(mmp[num]< mmp[input]){
num = input;}}
m = mmp[num];int first =0;for(int i =0; i < m; i++){
ans[i].clear();}for(auto it = mmp.begin(); it != mmp.end(); it++){if(it->first == num){for(int i =0; i < m; i++)ans[i].push_back(num);continue;}int cnt = it->second;for(int i =0; i < cnt; i++){
ans[first].push_back(it->first);
first =(first +1)% m;}}
cout << m << endl;for(int i =0; i < m; i++){for(int j =0; j < ans[i].size(); j++){if(j)cout <<" ";
cout << ans[i][j];}
cout << endl;}}return0;}