#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
namespace X{
void out(const char *str1, const char *str2, char *str3, int m, int n, int index)
{
if (!m && !n)
std::cout<<str3<<std::endl;
if (m) {
str3[index] = str1[0];
out(str1+1, str2, str3, m-1, n,index+1);
}
if (n) {
str3[index] = str2[0];
out(str1,str2+1, str3, m, n-1, index+1);
}
}
bool isstringsum (const char *str1, const char *str2, const char *str3) {
while (*str3) {
if(*str1==*str3) ++str1;
else if(*str2==*str3) ++str2;
else return false;
++str3;
}
if(*str1||*str2)
return false;
return true;
}
}
int main()
{
char *str1 = "ab";
char *str2 = "c";
int m = strlen(str1);
int n = strlen(str2);
char *strout= (char*) malloc((m+n+1)*sizeof(char));
strout[m+n] = '\0';
std::cout<<"result:"<<std::endl;
X::out (str1, str2, strout, m,n, 0);
char *str3 = "cab";
X::isstringsum(str1,str2,str3)?std::cout<<"ok"<<std::endl:std::cout<<"error"<<std::endl;
free(strout);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgpuYW1lc3BhY2UgWHsKCXZvaWQgb3V0KGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIsIGNoYXIgKnN0cjMsIGludCBtLCBpbnQgbiwgaW50IGluZGV4KQoJewoJCWlmICghbSAmJiAhbikKCQkJc3RkOjpjb3V0PDxzdHIzPDxzdGQ6OmVuZGw7CgoJCWlmIChtKSB7CgkJCXN0cjNbaW5kZXhdID0gc3RyMVswXTsKCQkJb3V0KHN0cjErMSwgc3RyMiwgc3RyMywgbS0xLCBuLGluZGV4KzEpOwoJCX0KCQlpZiAobikgewoJCQlzdHIzW2luZGV4XSA9IHN0cjJbMF07CgkJCW91dChzdHIxLHN0cjIrMSwgc3RyMywgbSwgbi0xLCBpbmRleCsxKTsKCQl9Cgl9CgoJYm9vbCBpc3N0cmluZ3N1bSAoY29uc3QgY2hhciAqc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgY29uc3QgY2hhciAqc3RyMykgewoJCXdoaWxlICgqc3RyMykgewoJCQlpZigqc3RyMT09KnN0cjMpICsrc3RyMTsKCQkJZWxzZSBpZigqc3RyMj09KnN0cjMpICsrc3RyMjsKCQkJZWxzZSByZXR1cm4gZmFsc2U7CgkJCSsrc3RyMzsKCQl9CgoJCWlmKCpzdHIxfHwqc3RyMikKCQkJcmV0dXJuIGZhbHNlOwoJCXJldHVybiB0cnVlOwoJfQp9CgppbnQgbWFpbigpCnsKCWNoYXIgKnN0cjEgPSAiYWIiOwoJY2hhciAqc3RyMiA9ICJjIjsKCQoJaW50IG0gPSBzdHJsZW4oc3RyMSk7CglpbnQgbiA9IHN0cmxlbihzdHIyKTsKCgljaGFyICpzdHJvdXQ9IChjaGFyKikgbWFsbG9jKChtK24rMSkqc2l6ZW9mKGNoYXIpKTsKCXN0cm91dFttK25dID0gJ1wwJzsKCQoJc3RkOjpjb3V0PDwicmVzdWx0OiI8PHN0ZDo6ZW5kbDsKCVg6Om91dCAoc3RyMSwgc3RyMiwgc3Ryb3V0LCBtLG4sIDApOwoJCgljaGFyICpzdHIzID0gImNhYiI7CglYOjppc3N0cmluZ3N1bShzdHIxLHN0cjIsc3RyMyk/c3RkOjpjb3V0PDwib2siPDxzdGQ6OmVuZGw6c3RkOjpjb3V0PDwiZXJyb3IiPDxzdGQ6OmVuZGw7CgkKCWZyZWUoc3Ryb3V0KTsKICAgIHJldHVybiAwOwp9