rt,算法似乎假了
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
int n, a[200010], a1, a2, a3, c1, c2, c3, ans, cnt[10], idx = 0;
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
if(a[i] == 1) c1++;
if(a[i] == 2) c2++;
if(a[i] == 3) c3++;
}
a1 = c1, a2 = c1+c2, a3 = c1+c2+c3;
for(int i = 1; i <= a1; i++)
if(a[i] != 1) ans++, cnt[a[i]]++, a[i] = 1;
cout << ans << endl;
idx = 2;
for(int i = a1+1; i <= n; i++)
if(a[i] == 1)
{
if(!cnt[idx]) idx++;
a[i] = idx, cnt[idx]--;
}
for(int i = 1; i <= n; i++) printf("%d ", a[i]);
cout << endl;
//
for(int i = a1+1; i <= a2; i++)
if(a[i] != 2) ans++, cnt[a[i]]++, a[i] = 2;
cout << ans << endl;
idx = 3;
for(int i = a2+1; i <= n; i++)
if(a[i] == 1)
{
if(!cnt[idx]) idx++;
a[i] = idx, cnt[idx]--;
}
for(int i = 1; i <= n; i++) printf("%d ", a[i]);
cout << endl;
//
for(int i = a2+1; i <= a3; i++)
if(a[i] != 3) ans++, a[i] = 3;
//cout << ans << endl;
printf("%d", ans);
return 0;
}