a[i]=b[i-1]-a[i-2]-a[i-1];
for(int i=index-1;i>=1;i--)
a[i]=b[i+1]-a[i+2]-a[i+1];
}
ok=1;
query();
continue;
}
//不然就只好贪心了
for(int i=1;i<=n;i++)
{
if(a[i]==-1 && a[i+1]==-1 && i%3==1)
index=i;
}
// 当找到连续满足这样的情况时,可以令i%3==1的那个取得尽量大的
memcpy(ans1,a,sizeof(a));
ans1[index]=b[index+1]-ans1[index+2];
ans1[index+1]=0;
int mx=0;
for(int i=index+3;i<=n;i++)
{
ans1[i]=b[i-1]-ans1[i-2]-ans1[i-1];
if(i%3==2)
mx=min(mx,ans1[i]);
}
for(int i=index-2;i>=1;i--)
{
ans1[i]=b[i+1]-ans1[i+2]-ans1[i+1];
if(i%3==2)
mx=min(mx,ans1[i]);
}
if(mx<0)
for(int i=1;i<=n;i+=3)
ans1[i]+=mx;
memcpy(ans2,a,sizeof(a));
ans2[index+1]=b[index+1]-a[index+2];
ans2[index]=0;
mx=0;
for(int i=index+3;i<=n;i++)
{
ans2[i]=b[i-1]-ans2[i-1]-ans2[i-2];
if(i%3==1)
mx=min(ans2[i],mx);
}
for(int i=index-1;i>=1;i--)
{
ans2[i]=b[i+1]-ans2[i+1]-ans2[i+2];
if(i%3==1)
mx=min(mx,ans2[i]);
}
if(mx<0)
for(int i=2;i<=n;i+=3)
ans2[i]+=mx;
query();
}
return 0;
}