#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m;
int f[2*N][35],yan[2*N];
struct flag{int l,r,id;}lan[2*N];
bool cmp(flag x,flag y){return x.l<y.l;}
void dfs()
{
for(int i=1,j=i;i<=2*n;i++)
{
while(j<=2*n&&lan[i].r>=lan[j].l)
j++;
f[i][0]=j-1;
}
for(int i=1;i<20;i++)
for(int j=1;j<=2*n;j++)
f[j][i]=f[f[j][i-1]][i-1];
}
void go(int x)
{
int i,op=x,ans=1;
for(i=19;i>=0;i--)
{
if((f[op][i]>0)&&(lan[f[op][i]].r<lan[x].l+m))
{
printf("%d\n",ans);
ans+=(1<<i);
op=f[op][i];
}
}
yan[lan[x].id]=ans+1;
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d%d",&lan[i].l,&lan[i].r);
if(lan[i].r<lan[i].l)lan[i].r+=m;
lan[i].id=i;
}
sort(lan+1,lan+n+1,cmp);
for(i=1;i<=n;i++)
{
lan[i+n]=lan[i];
lan[i+n].l+=m;
lan[i+n].r+=n;
}
dfs();
for(i=1;i<=n;i++)
{
printf("%d ",f[i][1]);
}
printf("\n");
for(i=1;i<=n;i++)
go(i);
for(i=1;i<=n;i++)
printf("%d ",yan[i]);
return 0;
}