import java.util.*;

public class ReverseStack {
    public int[] reverseStackRecursively(int[] stack, int top) {
        // write code here
//        r(stack, top - 1, 0);
//        return stack;

        Stack<Integer> stackAns = new Stack<>();
        for (int i : stack) {
            stackAns.push(i);
        }
        r(stackAns);
        for (int i = 0; i < stackAns.size(); i++) {
            stack[i] = stackAns.get(i);
        }

        return stack;
    }

    private void r(Stack<Integer> stackAns) {
        int pop = f(stackAns);
        if (stackAns.isEmpty()) {
            stackAns.push(pop);
            return;
        }

        r(stackAns);
        stackAns.push(pop);
    }

    private Integer f(Stack<Integer> stackAns) {
        Integer pop = stackAns.pop();
        if (stackAns.isEmpty()) {
            return pop;
        }

        Integer last = f(stackAns);
        stackAns.push(pop);
        return last;
    }
}