#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef vector<long long> vll;
typedef vector<vector<long long>> vvll;
typedef pair<int,int> pii;
typedef pair<long long, int> pli;

#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(),(x).end()
#define sz(x) (x).size()

ll mod = 998244353;

ll gcd(ll a, ll b){
  if (a%b == 0)return(b);
  else return(gcd(b, a%b));
}

ll inv(ll x){
  ll res = 1;
  ll k = mod - 2;
  ll y = x;
  while(k){
    if(k&1)res = (res*y)%mod;
    y = (y*y) % mod;
    k /= 2;
  }
  return res;
}

struct LazySegmentTree {
private:
    int n;
    vector<ll> node, lazy;

public:
    LazySegmentTree(vector<ll> v) {
        int sz = (int)v.size();
        n = 1; while(n < sz) n *= 2;
        node.resize(2*n-1);
        lazy.resize(2*n-1, 0);

        for(int i=0; i<sz; i++) node[i+n-1] = v[i];
        for(int i=n-2; i>=0; i--) node[i] = node[i*2+1] + node[i*2+2];
    }

    // k 番目のノードについて遅延評価を行う
    void eval(int k, int l, int r) {

      // 遅延配列が空でない場合、自ノード及び子ノードへの
      // 値の伝播が起こる
      if(lazy[k] != 0) {
        node[k] = (node[k] + lazy[k]) % mod;

        // 最下段かどうかのチェックをしよう
        // 子ノードは親ノードの 1/2 の範囲であるため、
        // 伝播させるときは半分にする
        if(r - l > 1) {
            lazy[2*k+1] = (lazy[2*k+1] + lazy[k]) % mod * inv(2) % mod;
            lazy[2*k+2] = (lazy[2*k+2] + lazy[k]) % mod * inv(2) % mod;
        }

        // 伝播が終わったので、自ノードの遅延配列を空にする
        lazy[k] = 0;
      }
    }

    void add(int a, int b, ll x, int k=0, int l=0, int r=-1) {
      if(r < 0) r = n;

      // k 番目のノードに対して遅延評価を行う
      eval(k, l, r);

      // 範囲外なら何もしない
      if(b <= l || r <= a) return;
      
      // 完全に被覆しているならば、遅延配列に値を入れた後に評価
      if(a <= l && r <= b) {
          lazy[k] = (lazy[k] + (r - l) * x % mod) % mod;
          eval(k, l, r);
      }

      // そうでないならば、子ノードの値を再帰的に計算して、
      // 計算済みの値をもらってくる
      else {
          add(a, b, x, 2*k+1, l, (l+r)/2);
          add(a, b, x, 2*k+2, (l+r)/2, r);
          node[k] = (node[2*k+1] + node[2*k+2]) % mod;
      }
    }

    ll getsum(int a, int b, int k=0, int l=0, int r=-1) {
      if(r < 0) r = n;
      if(b <= l || r <= a) return 0;

      // 関数が呼び出されたら評価！
      eval(k, l, r);
      if(a <= l && r <= b) return node[k];
      ll vl = getsum(a, b, 2*k+1, l, (l+r)/2);
      ll vr = getsum(a, b, 2*k+2, (l+r)/2, r);
      return (vl + vr)%mod;
    }
};

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);

  char s,t;
  cin >> s >> t;
  if(s == 'Y') t = 'A' + (t - 'a');
  cout << t << endl;
}
#include<bits/stdc++.h>
using namespace std;
#define intt long long int
#define intu unsigned long long int
#define vi vector<intt>
#define ii pair<int,int>
#define pb push_back
#define ff first
#define ss second
#define fast_io ios::sync_with_stdio(0);cin.tie(NULL);std::cout.tie(NULL);
# define PI           3.14159265358979323846 
#define all(a) a.begin(),a.end()
#define for0(i, n) for (int i = 0; i < n; i++)
#define for1(i, n) for (int i = 1; i <= n; i++)
#define loop(i,a,b) for (int i = a; i < b; i++)
#define bloop(i,a,b) for (int i = a ; i>=b;i--)
#define tc(t) int t; cin >> t; while (t--)
int mod = 1000000007;
intt gcd(intt a, intt b) {return b ? gcd(b, a % b) : a;}
int lcm(int a, int b) {return a * b / gcd(a, b); }
intt bpow(intt a,intt b) 
{
  intt res = 1;
  while (b > 0) {
    if (b & 1)res = res * a;
      a = a * a;
      b >>= 1;
  }
  return res;
}
intt fact(intt n) { 
   if ((n==0)||(n==1))
      return 1; 
   else
      return (n*fact(n-1))%mod;
}

void go()
{
#ifndef ONLINE_JUDGE
  freopen("IN.txt","r",stdin);
  freopen("OUT.txt","w",stdout);
  #endif
}
bool isPowerOfTwo (int x) 
{ 
    return (!(x&(x-1))); 
} 

int main(){
	go();
	fast_io
  char a,b;cin>>a>>b;
  if(a=='Y')
    cout << (char)(b-32) << "\n";
  else
    cout << b <<"\n";

}

















