/*ID:skylove3PROG: lampsLANG: C++2012/6/12拖了 加起来 有 7,8 个小时的样子,自己太弱了。 只要分析前六个。分奇偶,c 为 奇数时和1,3 一样偶数时和2,4一样。*/#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#include<algorithm>//===========================================================int p1[4] ={0,42,21,27};int p2[7] ={42,21,36,0,49,14,63};int p3[7] ={36,49,14,27,0,42,21};int p4[9] = {27,63,42,21,36,0,49,14,63};int m,on=1,off=1,On[200],OFF[200];int mark[100];int out[200];int res[200];int n,c,i;int ans[70];int flag2=0;int cmp(const void *a,const void *b){ return (*(int *)a-*(int *)b);}bool check(int s){ int i,j,temp; for(i=1;i<=on;i++) { temp = 1 << (6- On[i]); if(! (temp & s)) { return 0; } } for(i=1;i<=off;i++) { temp = 1 << (6- OFF[i]); if((temp & s) != 0) { return 0; } } return 1;}void print(int num){int i=0,j;memset(out,0,sizeof(out));if(num!=0){while( num!=1){out[i] = num%2;num = num>>1;i++;}out[i++] =1;out[i] = 0;}for(j=5,i=0;j>=0,i<=5;j--,i++){res[i] = out[j];}for(i=0;i<n;i++){printf("%d",res[i%6]);}printf("\n");}int main(){ // freopen("in.txt","r",stdin);freopen("lamps.in","r",stdin); freopen("lamps.out","w",stdout); scanf("%d%d",&n,&c); int flag =0 ; while(scanf("%d",&m) && m!=-1) { flag = 1; On[on++] = m%6; } on--; while(scanf("%d",&m)&& m!=-1) { flag =1; OFF[off++] = m%6; } off--; int k,t,index=0; if(c==0 && flag==0) { while(n--) { printf("1"); } printf("\n"); return 0; } if(c==0 && flag!=0) { printf("IMPOSSIBLE\n"); return 0; } if(c ==1) { for(i=0;i<4;i++){t= p1[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);}} } if(c ==2) { for(i=0;i<7;i++) { t= p2[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);} } } if(c ==3) { for(i=0;i<7;i++) { t= p3[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);} } } if(c ==4) { for(i=0;i<9;i++) { t= p4[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t; mark[t]=1;//print(t);} } } if(c %2 ==1 && c>4) {for(i=0;i<4;i++){t= p1[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);}}for(i=0;i<4;i++){t = p3[i];if( check(t) == 1 && mark[t]==0){//cout<<t<<endl;ans[index++]=t; mark[t]=1;//print(t);}} } if(c %2 ==0 && c>4) {for(i=0;i<7;i++){t= p2[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);}} for(i=0;i<9;i++) { t= p4[i];if( check(t) == 1 && mark[t]==0){ans[index++]=t;mark[t]=1;//print(t);} } }// printf("index = =%d\n",index); if(index==1) { printf("IMPOSSIBLE\n"); return 0; } qsort(ans,index,sizeof(int),cmp); for(i=0;i<index;i++) {print(ans[i]);// printf("%d \n",ans[i]); } return 0;}