题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022
算法特工队QQ群:979618872 (伸手党绕边,欢迎有良好基础的人加入)
//
// Created by Leo Lee on 2019/4/4.
//
#include <iostream>
#include <algorithm>
#include <map>
#include <set>
#include <stack>
#include <string>
using namespace std;
int main(){
int n;
string train1,train2;
while(scanf("%d",&n)!=EOF){
cin>>train1;
cin>>train2;
set<char> set1;
stack<char> stack1;
int index = 0,index2 = 0;
int *order = new int[2*n];
int isok = 1;
for(int i = 0;i<n;i++){ //循环到i,意思就是该i出栈了。
if(set1.find(train2[i]) == set1.end()){ //编号i如果还没有进栈
while(train1[index]!=train2[i]){ //train1一直进栈到遇到i,再把i进栈
stack1.push(train1[index]);
order[index2++] = 0;//in
set1.insert(train1[index]);
index++;
}
stack1.push(train1[index]);
order[index2++] = 0;//in
set1.insert(train1[index]);
index++;
}
if(set1.find(train2[i]) != set1.end()){ //编号i已经进栈了,那么就出栈
char c =stack1.top();
stack1.pop();
order[index2++] = 1;//out
if (c != train2[i]){
printf("No.\n");
isok = 0;
break;
}
}
}
if(isok){
printf("Yes.\n");
for(int i = 0;i<2*n;i++){
if (order[i]==0)
printf("in\n");
else
printf("out\n");
}
}
printf("FINISH\n");
}
return 0;
}