#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
#define MAX 100
char a[MAX];
char b[MAX];
char c[MAX];//出战的结果
char s[MAX];//栈
char path[MAX];
int akey=-1;//指针指的是当前的元素
int ckey=-1;
int skey=-1;
int len;
int inum=0;
int onum=0;
int same()
{
int i=0;
for(i=0;i<len;i++)
{
if(c[i]!=b[i])
return 0;
}
return 1;
}
void out()
{
int i=0;
for(i=0;i<2*len-1;i++)
{
printf("%c ",path[i]);
}
printf("%c\n",path[2*len-1]);
}
void bfs(int level)
{
//如果到最后一层,输入,同时不要进入下一层
if(level>=len*2)
{
//如果两个字符串相同
if(same())
{
out();
}
}
else
{
//进站
path[level]='i';
skey++;akey++;inum++;
if(inum<=len)
{
s[skey]=a[akey];
bfs(level+1);
}
//保护现场
path[level]=' ';
s[skey]=' ';
skey--;akey--;inum--;
//出战
path[level]='o';
ckey++;onum++;
c[ckey]=s[skey];
s[skey]=' ';
skey--;
if(onum<=inum&&c[ckey]==b[onum-1])
bfs(level+1);
path[level]=' ';
skey++;
s[skey]=c[ckey];
c[ckey]=' ';
ckey--;onum--;
}
}
void init()
{
akey=-1;//指针指的是当前的元素
ckey=-1;
skey=-1;
len;
inum=0;
onum=0;
a[0]='\0';
b[0]='\0';
c[0]='\0';
s[0]='\0';
path[0]='\0';
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%s %s",a,b)!=EOF)
{
len=strlen(a);
printf("[\n");
bfs(0);
printf("]\n");
}
return 0;
}