//2358735 2010-11-26 14:12:01 Accepted 1004 C++ 0 188 VRS
//1004 dfs(回溯)
//这题用C++做的,因为用到stack,免得自己写一个- -
//很直白的一道题,直接按题意模拟栈搜索就行
#include<stdio.h>
#include<string.h>
#include<stack>
using namespace std;
#define UNUSE -1;
char sourStr[1000];
char destStr[1000];
int outputStr[2000];
stack<char> *st;
int sourPos,destPos;
int inputLen;
void output()
{
int i;
for(i=0;i<inputLen*2;i++)
printf("%c ",outputStr[i]==0?'o':'i');
printf("\n");
}
void dfs(int k)
{
if(destPos==inputLen)
output();
else
{
//入栈操作分枝
if(sourPos<inputLen)
{
outputStr[k]=1;
st->push(sourStr[sourPos]);
sourPos++;
dfs(k+1);
//还原状态
sourPos--;
st->pop();
outputStr[k]=UNUSE;
}
//出栈操作分枝
if(!st->empty() && st->top()==destStr[destPos])
{
outputStr[k]=0;
st->pop();
destPos++;
dfs(k+1);
//还原状态
destPos--;
st->push(destStr[destPos]);
outputStr[k]=UNUSE;
}
}
}
int main()
{
st=new stack<char>;
while(scanf("%s\n%s",&sourStr,&destStr)!=EOF)
{
printf("[\n");
sourPos=destPos=0;
inputLen=strlen(sourStr);
dfs(0);
printf("]\n");
}
return 0;
}