Following is a C like pseudo-code of a function that takes a queue as an argument and uses a stack S to do the processing.
```
void IUn(Queue *Q)
I
Stack S; // Say it creates an empty stack S
// Run while Q is not empty
While (!isEmpty(Q))
l
// deQueve an item from Q and push the dequeued item
to S
push(6S, deQueue (Q));
l
// Run while stack S is not empty
while (!isEmpty(5S))
l
// Pop an item from S and enqueue the poppped item to Q
```
```
enQueue (Q, pop(5S));
1
l
```
What does the above function do in general?
A. Removes the last from $Q$
B. Keeps the Q the same as it was before the call
C. Makes Q empty
D. Reverses the $Q$