#include // cout, endl, cin #include // string, to_string, stoi #include // vector #include // min, max, swap, sort, reverse, lower_bound, upper_bound #include // pair, make_pair #include // tuple, make_tuple #include // int64_t, int*_t #include // printf #include // map #include // queue, priority_queue #include // set #include // stack #include // deque #include // unordered_map #include // unordered_set #include // bitset #include // isupper, islower, isdigit, toupper, tolower #include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++) using namespace std; typedef long long ll; const ll inf=1<<60; // 考える最大の整数 const int MAX = 200005; // 今回採用する大きい素数 const int MOD = 1000000007; const long long mod=1000000007; const long long mod2=998244353; using ll=long long; using P= pair; ll fact[MAX], inv_fact[MAX], inv[MAX]; // メモを計算する void init() { // 初期値設定と1はじまりインデックスに直す fact[0] = 1; fact[1] = 1; inv[0] = 1; inv[1] = 1; inv_fact[0] = 1; inv_fact[1] = 1; // メモの計算 repi(i, 2, MAX){ // 階乗 fact[i] = fact[i - 1] * i % MOD; // 逆元 inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD; // 逆元の階乗 inv_fact[i] = inv_fact[i - 1] * inv[i] % MOD; } } // 二項係数の実体 ll nCk(int n, int k) { ll x = fact[n]; // n!の計算 ll y = inv_fact[n-k]; // (n-k)!の計算 ll z = inv_fact[k]; // k!の計算 if (n < k) return 0; // 例外処理 if (n < 0 || k < 0) return 0; // 例外処理 return x * ((y * z) % MOD) % MOD; //二項係数の計算 } struct UnionFind { vector par, siz; UnionFind(int n) : par(n, -1) , siz(n, 1) { } // 根を求める int root(int x) { if (par[x] == -1) return x; else return par[x] = root(par[x]); } // x と y が同じグループに属するかどうか (根が一致するかどうか) bool issame(int x, int y) { return root(x) == root(y); } // x を含むグループと y を含むグループとを併合する bool unite(int x, int y) { x = root(x), y = root(y); if (x == y) return false; if (siz[x] < siz[y]) swap(x, y); par[y] = x; siz[x] += siz[y]; return true; } // x を含むグループのサイズ int size(int x) { return siz[root(x)]; } }; struct Edge { int to; int w; Edge(int to, int w) : to(to), w(w) { } }; using Graph=vector >; //min(x,y)が0以下の場合はmax(x,y)が返される //ユークリッドの互除法を元に実装 ll gcd(ll x,ll y){ if(x0){ r=x%y; x=y; y=r; } return x; } //オーバフローしないようにかける順番を気を付ける ll lcm(ll x,ll y){ return ll(x/gcd(x,y))*y; } ll pow_pow(ll x,ll n, ll mod){ if(n==0) return 1; ll res=pow_pow(x*x/mod,n/2,mod); if(n&1)res=res*x%mod; return res; } int main(){ string s; cin >> s; string ans; if(s=="E")ans='F'; else if(s=="B")ans='C'; else ans=s+'#'; cout << ans << endl; }