#include<stdio.h>
#include<stack>
#include<string.h>
#define maxn 1000000+10
using namespace std;
char s1[maxn];
char s2[maxn];
int n;
stack<char> stack1;
int a[maxn]; //保存操作次序,0表示入栈,1表示出栈
int IsOk() //模拟栈操作,判断是否能经过栈操作转化第二个字符串
{
int i=0;
int j=0; //保存跟第二个字符串匹配到第几个
int h=0; //保存第h次操作是入栈还是出栈
stack1.push(s1[0]);
a[0] = 0;
while(i<n)
{
while(!stack1.empty()&&stack1.top()==s2[j])
{
stack1.pop();
j++;
a[++h] = 1;
}
i++;
if(i<n)
{
stack1.push(s1[i]);
a[++h] = 0;
}
}
if(j==n)
return 1;
else
return 0;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
while(!stack1.empty())
{
stack1.pop();
}
memset(a,0,sizeof(a));
scanf("%s%s",s1,s2);
if(IsOk())
{
printf("Yes.\n");
for(int i=0;i<2*n;i++) //通过数组a依次输出栈的操作
{
if(a[i]==0)
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
}
#include<stack>
#include<string.h>
#define maxn 1000000+10
using namespace std;
char s1[maxn];
char s2[maxn];
int n;
stack<char> stack1;
int a[maxn]; //保存操作次序,0表示入栈,1表示出栈
int IsOk() //模拟栈操作,判断是否能经过栈操作转化第二个字符串
{
int i=0;
int j=0; //保存跟第二个字符串匹配到第几个
int h=0; //保存第h次操作是入栈还是出栈
stack1.push(s1[0]);
a[0] = 0;
while(i<n)
{
while(!stack1.empty()&&stack1.top()==s2[j])
{
stack1.pop();
j++;
a[++h] = 1;
}
i++;
if(i<n)
{
stack1.push(s1[i]);
a[++h] = 0;
}
}
if(j==n)
return 1;
else
return 0;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
while(!stack1.empty())
{
stack1.pop();
}
memset(a,0,sizeof(a));
scanf("%s%s",s1,s2);
if(IsOk())
{
printf("Yes.\n");
for(int i=0;i<2*n;i++) //通过数组a依次输出栈的操作
{
if(a[i]==0)
printf("in\n");
else
printf("out\n");
}
}
else
printf("No.\n");
printf("FINISH\n");
}
}