import java.util.*;


public class Solution {
    //step1:先将字符串的大小写转换
	//step2:将字符串以空格为界,分割单词
	//step3:将单词入栈,注意需要判断原字符串最后一位是不是空格的情况,如果是需要在结果字符串开头加上空格
	  //这里的多加个判断,可以保证字符串最后不会被多添加一个空格
	  //while(!stack.isEmpty()){
            //res.append(stack.pop());
            //if(!stack.isEmpty()){
                //res.append(" ");
            //}
        //}
	  
    public String trans (String s, int n) {
        if(n == 0){
            return s;
        }
        // write code here
        // 把字符串中由空格隔开的单词反序,同时反转每个字符的大小写
        // 应该带着空格一起放入栈中
        // a 97, A 65, z 122, Z 90
        StringBuilder res = new StringBuilder(lowerAndUpper(s));
        Stack<String> stack = new Stack<>();
        for(int i = 0; i < n; i++){
            // 以空格为界,分割单词
            int j = i;
            while(j < n && res.charAt(j) != ' '){
                j++;
            }
            stack.push((String)(res.substring(i, j)));
            i = j;
        }

        if(s.charAt(s.length() - 1) == ' '){
            res = new StringBuilder(" ");
        }else{
            res = new StringBuilder();
        }
        while(!stack.isEmpty()){
            res.append(stack.pop());
            if(!stack.isEmpty()){
                res.append(" ");
            }
        }
        return res.toString();
    }

    public String lowerAndUpper(String s){
        char[] cs = s.toCharArray();
        StringBuilder res = new StringBuilder();
        for(char c : cs){
            if(c >= 65 && c <= 90){
                c = (char) (c + 32);
            }else if(c >= 97 && c <= 122){
                c = (char) (c - 32);
            }
            res.append(c);
        }
        return res.toString();
    }
}