/*
** Simon Nguyen
** CSCI 180 - David Letscher
** October 31, 2014
*/
#include <iostream>
#include <string>
using namespace std;
unsigned int lines;
string inString, goalString;
/** Outputs, in sorted order, all solutions derivable from the given configuration */
void solve(const string& goal, // the goal string
const string& I, // unused portion of "initial" string
const string& S, // current stack sequence
const string& O, // (partial) output string
const string& moves // '++-+-' style trace of moves thus far
) {
// Output the trace if it matches the goal string
if (goal.size() == O.size()) {
// cout << "Case 1\n";
if (O == goal) {
cout << moves << endl;
}
return;
}
// When beginning, push first character onto stack
if (S.empty() && O.empty()) {
// cout << "Case 2\n";
string tempI = I;
string tempS = S;
string tempM = moves;
tempI.erase(0, 1);
tempS += I[0];
tempM += "+";
// cout << tempI << " " << tempS << " " << tempM << endl;
solve(goal, tempI, tempS, O, tempM);
return;
}
// Push onto stack S if string I is not empty
if (!I.empty()) {
// cout << "Case 3\n";
string tempI = I;
string tempS = S;
string tempM = moves;
tempS += tempI[0];
tempI.erase(0, 1);
tempM += "+";
// cout << tempI << " " << tempS << " " << tempM << endl;
solve(goal, tempI, tempS, O, tempM);
}
// Pop off I onto S
if (!S.empty()) {
// cout << "Case 4\n";
string tempS = S;
string tempO = O;
string tempM = moves;
tempO += S.back();
tempS.erase(tempS.length() - 1);
tempM += "-";
// cout << tempS << " " << tempO << " " << tempM << endl;
solve(goal, I, tempS, tempO, tempM);
}
}
int main() {
cin >> lines;
// Run until an input of 0 is given
for(unsigned int i; i < lines; i++) {
cin >> inString >> goalString;
cout << "Output for " << inString << " " << goalString << endl;
cout << "[" << endl;
solve(goalString, inString, "", "", "");
cout << "]" << endl;
}
return 0;
}
LyogCioqIFNpbW9uIE5ndXllbgoqKiBDU0NJIDE4MCAtIERhdmlkIExldHNjaGVyCioqIE9jdG9iZXIgMzEsIDIwMTQKKi8KCiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIGludCBsaW5lczsKc3RyaW5nIGluU3RyaW5nLCBnb2FsU3RyaW5nOwoKLyoqIE91dHB1dHMsIGluIHNvcnRlZCBvcmRlciwgYWxsIHNvbHV0aW9ucyBkZXJpdmFibGUgZnJvbSB0aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiAqLwp2b2lkIHNvbHZlKGNvbnN0IHN0cmluZyYgZ29hbCwgICAgICAvLyB0aGUgZ29hbCBzdHJpbmcKICAgICAgICAgICBjb25zdCBzdHJpbmcmIEksICAgICAgICAgLy8gdW51c2VkIHBvcnRpb24gb2YgImluaXRpYWwiIHN0cmluZwogICAgICAgICAgIGNvbnN0IHN0cmluZyYgUywgICAgICAgICAvLyBjdXJyZW50IHN0YWNrIHNlcXVlbmNlCiAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBPLCAgICAgICAgIC8vIChwYXJ0aWFsKSBvdXRwdXQgc3RyaW5nCiAgICAgICAgICAgY29uc3Qgc3RyaW5nJiBtb3ZlcyAgICAgIC8vICcrKy0rLScgc3R5bGUgdHJhY2Ugb2YgbW92ZXMgdGh1cyBmYXIKICAgICAgICAgICkgewoKCS8vIE91dHB1dCB0aGUgdHJhY2UgaWYgaXQgbWF0Y2hlcyB0aGUgZ29hbCBzdHJpbmcKCWlmIChnb2FsLnNpemUoKSA9PSBPLnNpemUoKSkgewoJCS8vIGNvdXQgPDwgIkNhc2UgMVxuIjsKCQlpZiAoTyA9PSBnb2FsKSB7CgkJCWNvdXQgPDwgbW92ZXMgPDwgZW5kbDsKCQl9CgoJCXJldHVybjsKCX0KCgkvLyBXaGVuIGJlZ2lubmluZywgcHVzaCBmaXJzdCBjaGFyYWN0ZXIgb250byBzdGFjawoJaWYgKFMuZW1wdHkoKSAmJiBPLmVtcHR5KCkpIHsKCQkvLyBjb3V0IDw8ICJDYXNlIDJcbiI7CgkJc3RyaW5nIHRlbXBJID0gSTsKCQlzdHJpbmcgdGVtcFMgPSBTOwoJCXN0cmluZyB0ZW1wTSA9IG1vdmVzOwoKCQl0ZW1wSS5lcmFzZSgwLCAxKTsKCQl0ZW1wUyArPSBJWzBdOwoJCXRlbXBNICs9ICIrIjsKCgkJLy8gY291dCA8PCB0ZW1wSSA8PCAiICIgPDwgdGVtcFMgPDwgIiAiIDw8IHRlbXBNIDw8IGVuZGw7CgoJCXNvbHZlKGdvYWwsIHRlbXBJLCB0ZW1wUywgTywgdGVtcE0pOwoJCXJldHVybjsKCX0KCgkvLyBQdXNoIG9udG8gc3RhY2sgUyBpZiBzdHJpbmcgSSBpcyBub3QgZW1wdHkKCWlmICghSS5lbXB0eSgpKSB7CgkJLy8gY291dCA8PCAiQ2FzZSAzXG4iOwoJCXN0cmluZyB0ZW1wSSA9IEk7CgkJc3RyaW5nIHRlbXBTID0gUzsKCQlzdHJpbmcgdGVtcE0gPSBtb3ZlczsKCgkJdGVtcFMgKz0gdGVtcElbMF07CgkJdGVtcEkuZXJhc2UoMCwgMSk7CgkJdGVtcE0gKz0gIisiOwoKCQkvLyBjb3V0IDw8IHRlbXBJIDw8ICIgIiA8PCB0ZW1wUyA8PCAiICIgPDwgdGVtcE0gPDwgZW5kbDsKCgkJc29sdmUoZ29hbCwgdGVtcEksIHRlbXBTLCBPLCB0ZW1wTSk7Cgl9CgoJLy8gUG9wIG9mZiBJIG9udG8gUwoJaWYgKCFTLmVtcHR5KCkpIHsKCQkvLyBjb3V0IDw8ICJDYXNlIDRcbiI7CgkJc3RyaW5nIHRlbXBTID0gUzsKCQlzdHJpbmcgdGVtcE8gPSBPOwoJCXN0cmluZyB0ZW1wTSA9IG1vdmVzOwoKCQl0ZW1wTyArPSBTLmJhY2soKTsKCQl0ZW1wUy5lcmFzZSh0ZW1wUy5sZW5ndGgoKSAtIDEpOwoJCXRlbXBNICs9ICItIjsKCgkJLy8gY291dCA8PCB0ZW1wUyA8PCAiICIgPDwgdGVtcE8gPDwgIiAiIDw8IHRlbXBNIDw8IGVuZGw7CgoJCXNvbHZlKGdvYWwsIEksIHRlbXBTLCB0ZW1wTywgdGVtcE0pOwoJfQp9CgppbnQgbWFpbigpIHsKCgljaW4gPj4gbGluZXM7CgoJLy8gUnVuIHVudGlsIGFuIGlucHV0IG9mIDAgaXMgZ2l2ZW4KCWZvcih1bnNpZ25lZCBpbnQgaTsgaSA8IGxpbmVzOyBpKyspIHsKCQljaW4gPj4gaW5TdHJpbmcgPj4gZ29hbFN0cmluZzsKCgkJY291dCA8PCAiT3V0cHV0IGZvciAiIDw8IGluU3RyaW5nIDw8ICIgIiA8PCBnb2FsU3RyaW5nIDw8IGVuZGw7CgkJY291dCA8PCAiWyIgPDwgZW5kbDsKCQlzb2x2ZShnb2FsU3RyaW5nLCBpblN0cmluZywgIiIsICIiLCAiIik7CgkJY291dCA8PCAiXSIgPDwgZW5kbDsKCX0KCglyZXR1cm4gMDsKfQo=