text: /*
  Implement the following operations of a queue using stacks.
  
  push(x) -- Push element x to the back of queue.
  pop() -- Removes the element from in front of queue.
  peek() -- Get the front element.
  empty() -- Return whether the queue is empty.
  Notes:
  You must use only standard operations of a stack -- which means only push to top, peek/pop from top, size, and is empty operations are valid.
  Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
  You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
  */
  
  /**
   * @constructor
   */
  var Queue = function() {
    this.inbox = [];
    this.outbox = [];
  };
  
  /**
   * @param {number} x
   * @returns {void}
   */
  Queue.prototype.push = function(x) {
    if (this.outbox.length === 0) this.outbox.push(x);
    else this.inbox.push(x);
  };
  
  /**
   * @returns {void}
   */
  Queue.prototype.pop = function() {
    if (this.outbox.length === 0) return null;
    var popped = this.outbox.pop();
    
    if (this.outbox.length === 0) {
      while (this.inbox.length > 0) {
        this.outbox.push(this.inbox.pop());
      }
    }
    
    return popped;
  };
  
  /**
   * @returns {number}
   */
  Queue.prototype.peek = function() {
    return this.outbox[this.outbox.length - 1];
  };
  
  /**
   * @returns {boolean}
   */
  Queue.prototype.empty = function() {
    return this.inbox.length + this.outbox.length === 0;
  };
  