Hindu-Arabic decimal numbers use the digits 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. We form decimal numbers creating strings with these digits, for example 102, 88, 12. 1 0 Recall that, for example, 12 is 1x10 + 2x10 Binary numbers use only 0 and 1. We can create numbers by creating strings with 0s and 1s. Example: 0 1 is expressed as 1 (1x2 )1 0 2 is expressed as 10 (1x2 + 0x2 ) 1 0 3 is expressed as 11 (1x2 + 1x2 ) The first 5 integers are 1, 10, 11, 100, 101 The first 8 integers are expressed as 1, 10, 11, 100, 101, 110, 111, 1000 The first 16 integers are expressed as 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, 10000 Write a non-member method binaryNumberSequence(int n) that produces the sequence of the first N integers. The method receives as parameter a number n, and returns a Queue<String> with n strings representing the first n integers converted to binary. The elements in the queue come in the increasing sequence order of the number. For example, a call to binaryNumberSequence(5) returns Q = {1, 10, 11, 100, 101}. You MUST create and store the binary number using division, mods, and a queue. LINKEDSTACKED IMPLEMENTATION public class LinkedStack<E> implements Stack<E> { @SuppressWarnings("hiding") private class Node<E> { private E element; private Node<E> next; public Node(E elm, Node<E> next) { this.element = elm; this.next = next; } public Node(E elm) { this(elm, null); } public Node() { this(null, null); } public E getElement() { return element; } public void setElement(E element) { this.element = element; } public Node<E> getNext() { return next; } public void setNext(Node<E> next) { this.next = next; } public void clear() { this.element = null; this.next = null; } } //End of Node Class private Node<E> header; private int currentSize; public LinkedStack() { this.header = new Node<>(); this.currentSize = 0; } @Override public void push(E newEntry) { if(newEntry == null) throw new IllegalArgumentException("Parameter cannot be null"); Node<E> newNode = new Node<>(newEntry, header.getNext()); header.setNext(newNode); currentSize++; } @Override public E pop() { if(isEmpty()) throw new EmptyStackException(); E elm = header.getNext().getElement(); Node<E> rmNode = header.getNext(); header.setNext(rmNode.getNext()); rmNode.clear(); rmNode = null; currentSize--; return elm; } @Override public E top() { if(isEmpty()) throw new EmptyStackException(); return header.getNext().getElement(); } @Override public boolean isEmpty() { return size() == 0; } @Override public int size() { return currentSize; } @Override public void clear() { while(!isEmpty()) pop(); } } BROWSER CLASS @Test public void test1() { String[] input = {"Google", "Facebook", "Instagram", "<", ">"}; String[] expected = {"Google", "Facebook", "Instagram", "Facebook", "Instagram"}; assertArrayEquals(expected, p.browserHistory(input)); } @Test public void test2() { String[] input = {"Google", "Facebook", "Instagram", "<", "<", ">", "Wikipedia", "Reddit", "<.