#include<bits/stdc++.h>
using namespace std;
void sol(long long l,long long r,long long vl,long long vr,vector<long long> &a,vector<long long> &res){
if(vl==vr){
for(long long i=l;i<=r;i++){
res[i]=vl;
}
return;
}
if(l>r){return;}
if(l==r){
if(a[l]<vl){res[l]=vl;}
else if(a[l]>vr){res[l]=vr;}
else{res[l]=a[l];}
return;
}
long long md=(vl+vr)/2;
long long h,mh;
long long lp=-1,rp=-1;
h=0; mh=0;
for(long long i=l;i<=r;i++){
if(a[i]<md){h++;}
else{h--;}
if(mh<h){
mh=h;
lp=i;
}
}
h=0; mh=0;
for(long long i=r;i>=l;i--){
if(a[i]>md){h++;}
else{h--;}
if(mh<h){
mh=h;
rp=i;
}
}
if(lp==-1){
lp=l;
}
else{
sol(l,lp,vl,md-1,a,res);
lp++;
}
if(rp==-1){
rp=r;
}
else{
sol(rp,r,md+1,vr,a,res);
rp--;
}
for(long long i=lp;i<=rp;i++){res[i]=md;}
return;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
long long n;
cin >> n;
vector<long long> a(n);
for(long long i=0;i<n;i++){
cin >> a[i];
a[i]=a[i]-i;
}
vector<long long> res(n);
sol(0,n-1,-(1ll<<40),(1ll<<40),a,res);
long long gap=0;
for(long long i=0;i<n;i++){
// if(i){cout << " ";}
gap+=abs(res[i]-a[i]);
// cout << res[i]+i << "\n";
// cout << res[i]+i;
}//cout << "\n";
cout << gap << "\n";
for(long long i=0;i<n;i++){
if(i){cout << " ";}
cout << res[i]+i;
}cout << "\n";
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIHNvbChsb25nIGxvbmcgbCxsb25nIGxvbmcgcixsb25nIGxvbmcgdmwsbG9uZyBsb25nIHZyLHZlY3Rvcjxsb25nIGxvbmc+ICZhLHZlY3Rvcjxsb25nIGxvbmc+ICZyZXMpewogIGlmKHZsPT12cil7CiAgICBmb3IobG9uZyBsb25nIGk9bDtpPD1yO2krKyl7CiAgICAgIHJlc1tpXT12bDsKICAgIH0KICAgIHJldHVybjsKICB9CiAgaWYobD5yKXtyZXR1cm47fQogIGlmKGw9PXIpewogICAgaWYoYVtsXTx2bCl7cmVzW2xdPXZsO30KICAgIGVsc2UgaWYoYVtsXT52cil7cmVzW2xdPXZyO30KICAgIGVsc2V7cmVzW2xdPWFbbF07fQogICAgcmV0dXJuOwogIH0KCiAgbG9uZyBsb25nIG1kPSh2bCt2cikvMjsKCiAgbG9uZyBsb25nIGgsbWg7CiAgbG9uZyBsb25nIGxwPS0xLHJwPS0xOwogIGg9MDsgbWg9MDsKICBmb3IobG9uZyBsb25nIGk9bDtpPD1yO2krKyl7CiAgICBpZihhW2ldPG1kKXtoKys7fQogICAgZWxzZXtoLS07fQogICAgaWYobWg8aCl7CiAgICAgIG1oPWg7CiAgICAgIGxwPWk7CiAgICB9CiAgfQogIGg9MDsgbWg9MDsKICBmb3IobG9uZyBsb25nIGk9cjtpPj1sO2ktLSl7CiAgICBpZihhW2ldPm1kKXtoKys7fQogICAgZWxzZXtoLS07fQogICAgaWYobWg8aCl7CiAgICAgIG1oPWg7CiAgICAgIHJwPWk7CiAgICB9CiAgfQoKICBpZihscD09LTEpewogICAgbHA9bDsKICB9CiAgZWxzZXsKICAgIHNvbChsLGxwLHZsLG1kLTEsYSxyZXMpOwogICAgbHArKzsKICB9CgogIGlmKHJwPT0tMSl7CiAgICBycD1yOwogIH0KICBlbHNlewogICAgc29sKHJwLHIsbWQrMSx2cixhLHJlcyk7CiAgICBycC0tOwogIH0KCiAgZm9yKGxvbmcgbG9uZyBpPWxwO2k8PXJwO2krKyl7cmVzW2ldPW1kO30KICByZXR1cm47Cn0KCmludCBtYWluKCl7CiAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogIGNpbi50aWUobnVsbHB0cik7CgogIGxvbmcgbG9uZyBuOwogIGNpbiA+PiBuOwogIHZlY3Rvcjxsb25nIGxvbmc+IGEobik7CiAgZm9yKGxvbmcgbG9uZyBpPTA7aTxuO2krKyl7CiAgICBjaW4gPj4gYVtpXTsKICAgIGFbaV09YVtpXS1pOwogIH0KCiAgdmVjdG9yPGxvbmcgbG9uZz4gcmVzKG4pOwogIHNvbCgwLG4tMSwtKDFsbDw8NDApLCgxbGw8PDQwKSxhLHJlcyk7CgogIGxvbmcgbG9uZyBnYXA9MDsKCiAgZm9yKGxvbmcgbG9uZyBpPTA7aTxuO2krKyl7CiAgICAvLyBpZihpKXtjb3V0IDw8ICIgIjt9CiAgICBnYXArPWFicyhyZXNbaV0tYVtpXSk7CiAgICAvLyBjb3V0IDw8IHJlc1tpXStpIDw8ICJcbiI7CiAgICAvLyBjb3V0IDw8IHJlc1tpXStpOwogIH0vL2NvdXQgPDwgIlxuIjsKICBjb3V0IDw8IGdhcCA8PCAiXG4iOwogIGZvcihsb25nIGxvbmcgaT0wO2k8bjtpKyspewogICAgaWYoaSl7Y291dCA8PCAiICI7fQogICAgY291dCA8PCByZXNbaV0raTsKICB9Y291dCA8PCAiXG4iOwogIHJldHVybiAwOwp9