首先可以根据最后一列得到第一列,又可以发现第一列和最后一列
0
和
#include<cstdio>
const int maxn=500010;
int a[maxn],ans[maxn],pos[2][maxn],cnt[2],next[maxn],num[2],n;
int main()
{
scanf("%d\n",&n);
for (int i=1;i<=n;i++) a[i]=getchar()-'0';
for (int i=1;i<=n;i++) pos[a[i]][++cnt[a[i]]]=i;
for (int i=1;i<=cnt[0];i++) next[i]=pos[0][i];
for (int i=cnt[0]+1;i<=n;i++) next[i]=pos[1][i-cnt[0]];
for (int i=next[1],c=1;c<=n;i=next[i],c++) num[ans[c]=a[i]]++;
if (num[0]==cnt[0]) for (int i=1;i<=n;i++) putchar(ans[i]+'0');
else printf("No Solution");
}