#include <stdio.h>
#include <algorithm>
#include <utility>
#define ll long long
#define x first
#define y second
using namespace std;
pair<ll ,int>a[200010];
ll dp[200010];
int ans[200010],num[200010];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%lld",&a[i].x),a[i].y=i,dp[i]=1e18; //一定要从零开始
dp[0]=0,dp[n]=1e18;
sort(a,a+n); //sort按照pair第一维排序
for(int i=0;i<n;i++)
for(int j=3;j<=5&&i+j<=n;j++)
{
int diff=a[i+j-1].x-a[i].x;
if(dp[i+j]>dp[i]+diff)
dp[i+j]=dp[i]+diff,num[i+j]=j; //num储存这个点的长度
}
int k=n; //从后开始枚举
int cnt=0;
while(k)
{
cnt++;
for(int j=1;j<=num[k];j++)ans[a[k-j].y]=cnt; //a【k-j】.y是位置
k-=num[k]; //每次减去这个num[k],
}
printf("%lld %d\n",dp[n],cnt);
for(int i=0;i<n;i++)printf("%d ",ans[i]);
}