//Luogu-P1468
//Luogu @W53729 (Userid 363523)
//@_Qijia (Userid 363524) AK IOI!
#include<iostream>
#include<cstring>
#include<cstdio>
#include<bitset>
#include<string>
#include<algorithm>
#define regll register long long
#define regint register int
#define regshort register short
#define _Qijia using
#define AK namespace
#define IOI std
_Qijia AK IOI;
int n,c,temp,scnt,tcnt;
string sol[20];
int fcon[105];
bitset<101> lights;
const bool ca[20][4]={0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,0,0,0,1,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,0,0,1,1,0,1,1,1,1,0,1,1,1,1};
bool ok(){
bitset<101> tset(lights);
for(regint i=1;i<=n;++i){
if(fcon[i]==0)
if(tset[i]) return false;
else if(fcon[i]==1){
tset.flip(i);
if(tset[i]) return false;
}
}
return true;
}
int main(){
memset(fcon,-1,sizeof(fcon));
bitset<101> s1(string("01111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"));
bitset<101> s2(string("01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010"));
bitset<101> s3(string("00101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101"));
bitset<101> s4(string("01001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001001"));
scanf("%d%d",&n,&c);
while(true){
scanf("%d",&temp);
if(temp^(-1)) fcon[temp]=1;
else break;
}
while(true){
scanf("%d",&temp);
if(temp^(-1)) fcon[temp]=0;
else break;
}
for(regint i=1;i<=16;++i){
tcnt=0;
for(regint j=0;j<=3;++j)
if(ca[i][j]) ++tcnt;
if((tcnt%2)!=(c%2) || tcnt>c) continue;
lights=s1;
if(ca[i][0]) lights=lights^s1;
if(ca[i][1]) lights=lights^s2;
if(ca[i][2]) lights=lights^s3;
if(ca[i][3]) lights=lights^s4;
if(ok()) ++scnt,sol[scnt]=lights.to_string().substr(1,n);
}
sort(sol+1,sol+scnt+1);
for(regint i=1;i<=scnt;++i) cout<<sol[i]<<'\n';
if(!scnt) puts("IMPOSSIBLE");
return 0;
}
码风恶心请见谅
有的时候bitset会莫名往前跳一位