#include <bits/stdc++.h>
using namespace std;
string t[12] = {"", "S", "B", "Q", "W", "SW", "BW", "QW", "Y", "SY"};
string g(string s1){
char a[20]={};
int len1=s1.size();
string s="";
for(int i=0;i<len1;i++){
a[i]=s1[len1-1-i];
}
while(a[len1-1]=='0'&&len1>1){
len1--;
}
for(int i=len1-1;i>=0;i--){
s+=a[i];
}
return s;
}
struct node{
char c;
int id;
}s1[20][5];
string f(string s) {
int len = s.size(), cnt = 0, flag = 0;
string ans;
int x = ceil(len * 1.0 / 4) * 4;
for (int i = 0; i < x - len; i++) {
s = " " + s;
}
for (int i = x - 1; i >= 0; i--) {
if ((i + 1) % 4 == 0) {
++cnt;
s1[cnt][0].c= s[i - 3];
s1[cnt][1].c= s[i - 2];
s1[cnt][2].c= s[i - 1];
s1[cnt][3].c= s[i];
s1[cnt][0].id=i-3;
s1[cnt][1].id=i-2;
s1[cnt][2].id=i-1;
s1[cnt][3].id=i;
}
}
for (int i = cnt; i >= 1; i--) {
flag = 0;
for (int j = 0; j <= 3; j++) {
if (s1[i][j].c!= ' ') {
if((s1[i][0].c == '0') ||(s1[i][1].c == '0' && s1[i][2].c == '0')|| (s1[i][0].c == '0' && s1[i][1].c == '0') || (s1[i][0].c == '0' && s1[i][1].c == '0' && s1[i][2].c == '0') || (s1[i][0].c == '0' && s1[i][1].c == '0' && s1[i][2].c == '0' && s1[i][3].c == '0')){
if(flag==0){
ans += "0";
flag=1;
}
}
if((flag==0&&s1[i][j].c!='0')||(flag==1&&s1[i][j].c!='0')){
if(s1[i][1].c=='0'||s1[i][2].c=='0'){
if(ans[ans.size()-1]!='0'){
if(s1[i][j].id!=len-1||s1[i][j].id!=len-2&&(j!=2||j!=3)&&(s1[i][1].c=='0'&&s1[i][2].c=='0')){
ans+='0';
}
}
}
ans += s1[i][j].c+ t[3 - j];
}
}
}
ans += t[4 * i - 4];
}
return g(ans);
}
int main() {
string s, ans;
cin >> s;
int len = s.size(), pos = 0, flag = 0, flag1 = 0, cnt = 0;
s = " " + s;
if (s[1] != '-'&&s[1]!='+') {
string tmp;
for (int i = 1; i <= len; i++) {
if (s[i] == '.') {
pos = i;
flag = 1;
}
}
if (!flag) pos = len;
int n = 0;
for (int i = 1; i <= pos; i++) {
if (s[i] == '0') {
cnt++;
}
}
for (int i = 1; i <= pos; i++) {
if (s[i] == '0' && s[i + 1] != '0') {
n = i + 1;
break;
}
}
if (flag&&cnt == pos - 1) {
if (s[len] != '.') {
ans += "0D";
flag1 = 1;
} else {
cout << 0;
return 0;
}
}
if(s[1]!='0'){
n=0;
}
if (n == 0) {
for (int i = 1; !flag ? i <= pos : i < pos; i++) {
tmp += s[i];
}
} else {
for (int i = n; i <= pos; i++) {
tmp += s[i];
}
}
if(!flag1) ans += f(tmp);
if (flag && !flag1&&s[s.size()-1]!='.') ans += 'D';
for (int i = pos + 1; i <= len; i++) {
ans += s[i];
}
if (ans != "") {
cout << ans;
return 0;
} else {
cout << 0;
return 0;
}
} else if (s[1] == '-'||s[1]=='+') {
string tmp;
if(s[1]!='+') ans += 'F';
for (int i = 1; i <= len; i++) {
if (s[i] == '.') {
pos = i;
flag = 1;
}
}
if (!flag) pos = len;
int n = 0;
for (int i = 1; i <= pos; i++) {
if (s[i] == '0') {
cnt++;
}
}
for (int i = 1; i <= pos; i++) {
if (s[i] == '0' && s[i + 1] != '0') {
n = i + 1;
break;
}
}
if (flag&&cnt == pos - 2) {
if (s[len] != '.') {
ans += "0D";
flag1 = 1;
} else {
cout << 0;
return 0;
}
}
if(s[2]!='0'){
n=0;
}
if (n == 0 ) {
for (int i = 2; !flag ? i <= pos : i < pos; i++) {
tmp += s[i];
}
} else {
for (int i = n; i < pos; i++) {
tmp += s[i];
}
}
if(!flag1) ans += f(tmp);
if (flag && !flag1&&s[s.size()-1]!='.') ans += 'D';
for (int i = pos + 1; i <= len; i++) {
ans += s[i];
}
if (ans != "F") {
cout << ans;
return 0;
} else {
cout << 0;
return 0;
}
}
return 0;
}