#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
// 返回str对应的科学计数法形式0.x1x2x3... * 10^k中,x1x2x3...部分
string getBodyLevel(string str,int &level) {
int len = str.size();
int posDot = str.find(".");
int posFirstNum=0; // 寻找第一个非0数字所在下标
while(posFirstNum<len &&(str[posFirstNum]=='0' || str[posFirstNum]=='.'))
posFirstNum++;
if(posFirstNum==len) {
level=0;
return "0";
}
if(posDot==string::npos) {
level=len-posFirstNum;
return str.substr(posFirstNum);
} else {
if(posFirstNum<posDot) {
level = posDot - posFirstNum; // 此时level>0
return str.substr(posFirstNum,level) + str.substr(posDot+1);
} else {
level = posDot - posFirstNum + 1; // 此时level<=0
return str.substr(posFirstNum);
}
}
}
// 进行截取操作
string chop(string str,int n) {
int len = str.size();
if(len>=n)
return str.substr(0,n);
for(int i=0; i<n-len; i++)
str+="0";
return str;
}
void Print(string str, int level) {
if(str=="0") {
printf(" 0");
return ;
}
printf(" 0.%s*10^%d",str.c_str(),level);
}
int main() {
int N;
string A,B;
while(cin>>N>>A>>B) {
int levelA,levelB;
string chopA = chop(getBodyLevel(A, levelA),N);
string chopB = chop(getBodyLevel(B, levelB),N);
if(levelA==levelB && chopA==chopB) {
printf("YES");
Print(chopA, levelA);
} else {
printf("NO");
Print(chopA, levelA);
Print(chopB, levelB);
}
printf("\n");
}
return 0;
}