#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
inline void relax_min(T &a, U b) {
  a = min(a, b);
}
template <class T, class U>
inline void relax_max(T &a, U b) {
  a = max(a, b);
}
template <typename T>
inline bool updmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
inline bool updmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <class T, class U>
istream &operator>>(istream &in, pair<T, U> &a) {
  in >> a.first >> a.second;
  return in;
}
template <class T, class U>
ostream &operator<<(ostream &out, const pair<T, U> &a) {
  out << a.first << ' ' << a.second;
  return out;
}
template <class T>
istream &operator>>(istream &in, vector<T> &a) {
  for (auto((i)) = (0); ((i)) < ((((int)(a).size()))); ++((i))) in >> a[i];
  return in;
}
template <class T>
ostream &operator<<(ostream &out, const vector<T> &a) {
  for (auto((i)) = (0); ((i)) < ((((int)(a).size()))); ++((i)))
    out << a[i] << ' ';
  return out;
}
int next_int() {
  int(tmp);
  scanf("%d", &(tmp));
  return tmp;
}
long long modPow(long long a, long long b, long long MOD) {
  long long ret = 1;
  for (; b; b >>= 1) {
    if (b & 1)
      ret = ((((((long long)(ret) * (long long)(a))) % ((MOD))) + ((MOD))) %
             ((MOD)));
    a = ((((((long long)(a) * (long long)(a))) % ((MOD))) + ((MOD))) % ((MOD)));
  }
  return ret;
}
const int MAXN1 = (int)1e5 + 3;
const int MAXN2 = (int)2e5 + 3;
const int MAXN3 = (int)3e5 + 3;
const int MAXN4 = (int)4e5 + 3;
const int MAXN5 = (int)5e5 + 3;
const int INF = (int)1e9 + 7;
const int INF2 = 1 << 30;
const long long INFLL = (long long)4e18 + 7;
const long long INFLL2 = 1LL << 60;
const long double Pi = acos(-1.0);
const long double eps = 1e-7;
const int mod = (int)1e9 + 7;
int main() {
  string str;
  cin >> str;
  int n = ((int)(str).size());
  int first, last;
  for (first = 0; first < n; ++first) {
    if (str[first] != 'a') break;
  }
  if (first == n) {
    cout << string(n - 1, 'a') << 'z' << endl;
    return 0;
  }
  for (last = first; last < n; ++last) {
    if (str[last] == 'a') break;
  }
  for (auto(i) = (first); (i) < (last); ++(i)) {
    if (str[i] == 'a')
      str[i] = 'z';
    else
      str[i] = str[i] - 1;
  }
  cout << str << endl;
  return 0;
}

### Prompt

Develop a solution in CPP to the problem described below:

You are given a non-empty string s consisting of lowercase English letters. You have to pick exactly one non-empty substring of s and shift all its letters 'z' <image> 'y' <image> 'x' <image> 'b' <image> 'a' <image> 'z'. In other words, each character is replaced with the previous character of English alphabet and 'a' is replaced with 'z'.

What is the lexicographically minimum string that can be obtained from s by performing this shift exactly once?

Input

The only line of the input contains the string s (1 ≤ |s| ≤ 100 000) consisting of lowercase English letters.

Output

Print the lexicographically minimum string that can be obtained from s by shifting letters of exactly one non-empty substring.

Examples

Input

codeforces


Output

bncdenqbdr


Input

abacaba


Output

aaacaba

Note

String s is lexicographically smaller than some other string t of the same length if there exists some 1 ≤ i ≤ |s|, such that s1 = t1, s2 = t2, ..., si - 1 = ti - 1, and si < ti.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
inline void relax_min(T &a, U b) {
  a = min(a, b);
}
template <class T, class U>
inline void relax_max(T &a, U b) {
  a = max(a, b);
}
template <typename T>
inline bool updmax(T &a, const T &b) {
  return a < b ? a = b, 1 : 0;
}
template <typename T>
inline bool updmin(T &a, const T &b) {
  return a > b ? a = b, 1 : 0;
}
template <class T, class U>
istream &operator>>(istream &in, pair<T, U> &a) {
  in >> a.first >> a.second;
  return in;
}
template <class T, class U>
ostream &operator<<(ostream &out, const pair<T, U> &a) {
  out << a.first << ' ' << a.second;
  return out;
}
template <class T>
istream &operator>>(istream &in, vector<T> &a) {
  for (auto((i)) = (0); ((i)) < ((((int)(a).size()))); ++((i))) in >> a[i];
  return in;
}
template <class T>
ostream &operator<<(ostream &out, const vector<T> &a) {
  for (auto((i)) = (0); ((i)) < ((((int)(a).size()))); ++((i)))
    out << a[i] << ' ';
  return out;
}
int next_int() {
  int(tmp);
  scanf("%d", &(tmp));
  return tmp;
}
long long modPow(long long a, long long b, long long MOD) {
  long long ret = 1;
  for (; b; b >>= 1) {
    if (b & 1)
      ret = ((((((long long)(ret) * (long long)(a))) % ((MOD))) + ((MOD))) %
             ((MOD)));
    a = ((((((long long)(a) * (long long)(a))) % ((MOD))) + ((MOD))) % ((MOD)));
  }
  return ret;
}
const int MAXN1 = (int)1e5 + 3;
const int MAXN2 = (int)2e5 + 3;
const int MAXN3 = (int)3e5 + 3;
const int MAXN4 = (int)4e5 + 3;
const int MAXN5 = (int)5e5 + 3;
const int INF = (int)1e9 + 7;
const int INF2 = 1 << 30;
const long long INFLL = (long long)4e18 + 7;
const long long INFLL2 = 1LL << 60;
const long double Pi = acos(-1.0);
const long double eps = 1e-7;
const int mod = (int)1e9 + 7;
int main() {
  string str;
  cin >> str;
  int n = ((int)(str).size());
  int first, last;
  for (first = 0; first < n; ++first) {
    if (str[first] != 'a') break;
  }
  if (first == n) {
    cout << string(n - 1, 'a') << 'z' << endl;
    return 0;
  }
  for (last = first; last < n; ++last) {
    if (str[last] == 'a') break;
  }
  for (auto(i) = (first); (i) < (last); ++(i)) {
    if (str[i] == 'a')
      str[i] = 'z';
    else
      str[i] = str[i] - 1;
  }
  cout << str << endl;
  return 0;
}

```