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.

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

public class AIMRound3C {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		out=new PrintWriter (new BufferedOutputStream(System.out));
		FastReader s=new FastReader();
		String str=s.next();
		int start=0;
		int end=-1;
		boolean started=false;
		for(int i=0;i<str.length();i++) {
			if(str.charAt(i)!='a' &&  !started) {
				start=i;
				started=true;
			}else if(str.charAt(i)=='a' && started) {
				end=i-1;
				started=false;
				break;
			}
		}
		if(started) {
			end=str.length()-1;
		}
		StringBuilder ans=new StringBuilder();
		for(int i=0;i<str.length()-1;i++) {
			if(i>=start && i<=end) {
				ans.append((char)(str.charAt(i)-1));
			}else {
				ans.append(str.charAt(i));
			}
		}
		if(start==0&& end==-1) {
			char cc=str.charAt(str.length()-1);
			if(cc=='a') {
				ans.append('z');
			}else {
				ans.append((char)(cc-1));
			}
		}else {
			char cc=str.charAt(str.length()-1);
			if(cc=='a') {
				ans.append('a');
			}else {
				if(end==str.length()-1) {
					ans.append((char)(cc-1));
				}else {
					ans.append(cc);
				}
			}
		}
		out.println(ans);
		out.close();
	}

	public static PrintWriter out;
	
	public static class FastReader {
		BufferedReader br;
		StringTokenizer st;
		//it reads the data about the specified point and divide the data about it ,it is quite fast
		//than using direct 

		public FastReader() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreTokens()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		int nextInt() {
			return Integer.parseInt(next());//converts string to integer
		}

		double nextDouble() {
			return Double.parseDouble(next());
		}

		long nextLong() {
			return Long.parseLong(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return str;
		}
	}
	
}
