#include<stdio.h>
#include<stack>
#include<string.h>
#include<math.h>
using namespace std;
stack<char>s; //栈名,栈内类型的定义方式
char str1[30];
char str2[30];
int c[60];
int n;
int num=0;
void judge(int x);
void search(int x,int y);
void output(int x);
int main()
{
int num1,num2;
while(scanf("%s",&str1) != EOF) //一个有意思的东西,它可以在没有更多数据可供执行的时候“急刹车”,使程序停止
{
scanf("%s",&str2);
num1 = strlen(str1);
num2 = strlen(str2);
if(num1!=num2) // 偷个小懒,只判断了源字符串和目标字符串的长度
{
printf("[\n]\n");
}
else
{
n=num1;
printf("[\n");
search(0,2*n-1);
printf("]\n");
}
}
return 0;
}
void output(int x) //二进制穷举,用“0”“1”分别表示“入栈i”“出栈o”
{
int m;
for(m=0;m<2*n-1;m++)
{
if(c[m]==0)
{
printf("i ");
}
if(c[m]==1)
{
printf("o ");
}
}
if(c[2*n-1]==0)//格式要求
{
printf("i");
}
if(c[2*n-1]==1)
{
printf("o");
}
printf("\n");
}
void search(int x,int y)
{
int j;
int i;
if(x==y)
{
c[0]=0;
for(j=0;j<x+1;j++)
{
if(c[j]==0)
{
num=num+1;
}
}
if(num==(y+1)/2)
{
judge(x);
}
num=0;
}
else
{
for(i=0;i<2;i++)
{
c[x+1]=i;
search(x+1,y);
}
}
}
void judge(int x)
{
int i;
int flag;
int sum1,sum2;
flag=1;
sum1=0;
sum2=0;
for(i=0;i<x+1&&flag==1;i++)
{
if(c[i]==0)
{
s.push(str1[sum1]);//入栈基本格式;
sum1=sum1+1;
}
if(c[i]==1)
{
if((sum1-1>=sum2)&&s.top()==str2[sum2])
{
s.pop();//出栈基本格式;
sum2=sum2+1;
}
else
{
flag=0;
}
}
}
if(flag==1&&c[2*n-1]!=0)
{
output(x);
}
while(!s.empty())//s.empty()在栈为空时值为1;
{
s.pop();//’一组数据改动完毕后,清空栈,为下一次服务;
}
}
#include<stack>
#include<string.h>
#include<math.h>
using namespace std;
stack<char>s; //栈名,栈内类型的定义方式
char str1[30];
char str2[30];
int c[60];
int n;
int num=0;
void judge(int x);
void search(int x,int y);
void output(int x);
int main()
{
int num1,num2;
while(scanf("%s",&str1) != EOF) //一个有意思的东西,它可以在没有更多数据可供执行的时候“急刹车”,使程序停止
{
scanf("%s",&str2);
num1 = strlen(str1);
num2 = strlen(str2);
if(num1!=num2) // 偷个小懒,只判断了源字符串和目标字符串的长度
{
printf("[\n]\n");
}
else
{
n=num1;
printf("[\n");
search(0,2*n-1);
printf("]\n");
}
}
return 0;
}
void output(int x) //二进制穷举,用“0”“1”分别表示“入栈i”“出栈o”
{
int m;
for(m=0;m<2*n-1;m++)
{
if(c[m]==0)
{
printf("i ");
}
if(c[m]==1)
{
printf("o ");
}
}
if(c[2*n-1]==0)//格式要求
{
printf("i");
}
if(c[2*n-1]==1)
{
printf("o");
}
printf("\n");
}
void search(int x,int y)
{
int j;
int i;
if(x==y)
{
c[0]=0;
for(j=0;j<x+1;j++)
{
if(c[j]==0)
{
num=num+1;
}
}
if(num==(y+1)/2)
{
judge(x);
}
num=0;
}
else
{
for(i=0;i<2;i++)
{
c[x+1]=i;
search(x+1,y);
}
}
}
void judge(int x)
{
int i;
int flag;
int sum1,sum2;
flag=1;
sum1=0;
sum2=0;
for(i=0;i<x+1&&flag==1;i++)
{
if(c[i]==0)
{
s.push(str1[sum1]);//入栈基本格式;
sum1=sum1+1;
}
if(c[i]==1)
{
if((sum1-1>=sum2)&&s.top()==str2[sum2])
{
s.pop();//出栈基本格式;
sum2=sum2+1;
}
else
{
flag=0;
}
}
}
if(flag==1&&c[2*n-1]!=0)
{
output(x);
}
while(!s.empty())//s.empty()在栈为空时值为1;
{
s.pop();//’一组数据改动完毕后,清空栈,为下一次服务;
}
}