#define m(a,b)for(j=0;j<4;j++){l[j]=i&a<<j*b;if(__builtin_popcount(l[j])-2)goto l;for(k=0;k<j;k++)if(l[j]==l[k])goto l;}
i,j,k,l[4];f(char*s){for(i=0;i<65536;i++){m(15,4)m(4369,1)for(j=0;j<16;j++)if((!(i&1<<j)==s[j]-49)&&(s[j]!=48))goto l;for(j=0;j<16;j++)putchar(50-!(i&1<<j));l:;}}

int main (){
  int i;
  char *test[] = {
    "0020010100000100",
    "0010000200121000",
    "1000100102000000",
    0
  };

  for (i = 0; test[i]; i++) {
    f(test[i]);
    puts("");
  }
}
