#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b) {
int x = 1;
a %= M;
while (b) {
if (b & 1) x = (x * a) % M;
a = (a * a) % M;
b >>= 1;
}
return x;
}
//_ ***************************** START Below *******************************
vector<int> a;
vector<vector<int>> consistency(int n, int m){
vector<int> freq(m + 1, 0);
vector<int> ans(a);
for (int i = 0; i < n; i++) {
if (a[i] <= m) {
freq[a[i]]++;
}
}
int target = n / m;
vector<int> mark;
for(int i=0; i<n; i++){
if(a[i]>m) mark.push_back(i);
else {
if(freq[a[i]] > target){
mark.push_back(i);
freq[a[i]]--;
}
}
}
int changes = 0;
for (int i = 1; i <= m; i++) {
while(freq[i] < target){
int j = mark.back();
mark.pop_back();
ans[j] = i;
freq[i]++;
changes++;
}
}
return {{target, changes}, ans};
}
vector<vector<int>> practice(int n, int m){
return {};
}
void solve() {
int n, m;
cin>> n >> m;
a.resize(n);
for(int i=0; i<n; i++) cin >> a[i];
auto ans = consistency(n, m);
cout << ans[0][0] << " " << ans[0][1] << endl;
for(auto& it : ans[1]){
cout << it << " ";
}cout << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYikgewogICAgaW50IHggPSAxOwogICAgYSAlPSBNOwogICAgd2hpbGUgKGIpIHsKICAgICAgICBpZiAoYiAmIDEpIHggPSAoeCAqIGEpICUgTTsgCiAgICAgICAgYSA9IChhICogYSkgJSBNOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4geDsKfQoKCi8vXyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBCZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoKCgp2ZWN0b3I8aW50PiBhOwoKdmVjdG9yPHZlY3RvcjxpbnQ+PiBjb25zaXN0ZW5jeShpbnQgbiwgaW50IG0pewoKICAgIHZlY3RvcjxpbnQ+IGZyZXEobSArIDEsIDApOwogICAgdmVjdG9yPGludD4gYW5zKGEpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKGFbaV0gPD0gbSkgewogICAgICAgICAgICBmcmVxW2FbaV1dKys7CiAgICAgICAgfQogICAgfQoKICAgIGludCB0YXJnZXQgPSBuIC8gbTsKCiAgICB2ZWN0b3I8aW50PiBtYXJrOwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBpZihhW2ldPm0pIG1hcmsucHVzaF9iYWNrKGkpOwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZihmcmVxW2FbaV1dID4gdGFyZ2V0KXsKICAgICAgICAgICAgICAgIG1hcmsucHVzaF9iYWNrKGkpOwogICAgICAgICAgICAgICAgZnJlcVthW2ldXS0tOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKCiAgICBpbnQgY2hhbmdlcyA9IDA7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgd2hpbGUoZnJlcVtpXSA8IHRhcmdldCl7CiAgICAgICAgICAgIGludCBqID0gbWFyay5iYWNrKCk7CiAgICAgICAgICAgIG1hcmsucG9wX2JhY2soKTsKCiAgICAgICAgICAgIGFuc1tqXSA9IGk7CiAgICAgICAgICAgIGZyZXFbaV0rKzsKCiAgICAgICAgICAgIGNoYW5nZXMrKzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHt7dGFyZ2V0LCBjaGFuZ2VzfSwgYW5zfTsKCn0KCgoKCgoKCgoKdmVjdG9yPHZlY3RvcjxpbnQ+PiBwcmFjdGljZShpbnQgbiwgaW50IG0pewoKCiAgICByZXR1cm4ge307Cn0KCgoKCgp2b2lkIHNvbHZlKCkgewogICAgCiAgICBpbnQgbiwgbTsKICAgIGNpbj4+IG4gPj4gbTsKICAgIAogICAgYS5yZXNpemUobik7CiAgICBmb3IoaW50IGk9MDsgaTxuOyBpKyspIGNpbiA+PiBhW2ldOwogICAgCiAgICBhdXRvIGFucyA9IGNvbnNpc3RlbmN5KG4sIG0pOwoKICAgIGNvdXQgPDwgYW5zWzBdWzBdIDw8ICIgIiA8PCBhbnNbMF1bMV0gPDwgZW5kbDsKICAgIGZvcihhdXRvJiBpdCA6IGFuc1sxXSl7CiAgICAgICAgY291dCA8PCBpdCA8PCAiICI7CiAgICB9Y291dCA8PCBlbmRsOwoKCn0KCgoKCgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9