#include <stdio.h>
#include <string.h>
#include <algorithm>
void convert(const char * in, char * out, char b[8]){
while (*in){
*out = 0;
for (int i = 0; i < 8; i++) if (*in & (1 << b[i])) *out |= (1 << i);
in++;
out++;
}
}
char input[] = "Hello, world!";
char pattern[] = "world";
char output[sizeof(input)] = {0};
char bits[8] = {0,1,2,3,4,5,6,7};
int n = 0;
int main(){
do{
n++;
convert(input, output, bits);
if (strstr(output, pattern)) printf("%d\t%s\t%d%d%d%d%d%d%d%d\n",n,output,bits[0],bits[1],bits[2],bits[3],bits[4],bits[5],bits[6],bits[7]);
} while(std::next_permutation(bits, bits+8));
printf("%d\n",n);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnZvaWQgY29udmVydChjb25zdCBjaGFyICogaW4sIGNoYXIgKiBvdXQsIGNoYXIgYls4XSl7CiAgd2hpbGUgKCppbil7CiAgICAqb3V0ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSBpZiAoKmluICYgKDEgPDwgYltpXSkpICpvdXQgfD0gKDEgPDwgaSk7CiAgICBpbisrOwogICAgb3V0Kys7CiAgfQp9CgpjaGFyIGlucHV0W10gPSAiSGVsbG8sIHdvcmxkISI7CmNoYXIgcGF0dGVybltdID0gIndvcmxkIjsKY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSB7MH07CmNoYXIgYml0c1s4XSA9IHswLDEsMiwzLDQsNSw2LDd9OwppbnQgbiA9IDA7CgppbnQgbWFpbigpewogIGRvewogIAluKys7CiAgICBjb252ZXJ0KGlucHV0LCBvdXRwdXQsIGJpdHMpOwogICAgaWYgKHN0cnN0cihvdXRwdXQsIHBhdHRlcm4pKSBwcmludGYoIiVkXHQlc1x0JWQlZCVkJWQlZCVkJWQlZFxuIixuLG91dHB1dCxiaXRzWzBdLGJpdHNbMV0sYml0c1syXSxiaXRzWzNdLGJpdHNbNF0sYml0c1s1XSxiaXRzWzZdLGJpdHNbN10pOwogIH0gd2hpbGUoc3RkOjpuZXh0X3Blcm11dGF0aW9uKGJpdHMsIGJpdHMrOCkpOwogIHByaW50ZigiJWRcbiIsbik7Cn0=