content: import java.util.Arrays;
  import java.util.Random;
  
  /**
   * A deck of playing cards (of fixed size).
   */
  public class Deck {
  
      private Card[] cards;
  
      /**
       * Constructs a standard deck of 52 cards.
       */
      public Deck() {
          this.cards = new Card[52];
          int index = 0;
          for (int suit = 0; suit <= 3; suit++) {
              for (int rank = 1; rank <= 13; rank++) {
                  this.cards[index] = new Card(rank, suit);
                  index++;
              }
          }
      }
  
      /**
       * Constructs a deck of n cards (null).
       */
      public Deck(int n) {
          this.cards = new Card[n];
      }
  
      /**
       * Gets the internal cards array.
       */
      public Card[] getCards() {
          return this.cards;
      }
  
      /**
       * Displays each of the cards in the deck.
       */
      public void print() {
          for (int i = 0; i < this.cards.length; i++) {
              System.out.println(this.cards[i]);
          }
      }
  
      /**
       * Returns a string representation of the deck.
       */
      public String toString() {
          return Arrays.toString(this.cards);
      }
  
      /**
       * Chooses a random number between low and high, including both.
       */
      public int randomInt(int low, int high) {
          return 0;
      }
  
      /**
       * Swaps the cards at indexes i and j.
       */
      public void swapCards(int i, int j) {
      }
  
      /**
       * Randomly permutes the array of cards.
       */
      public void shuffle() {
      }
  
      /**
       * Finds the index of the lowest card
       * between low and high inclusive.
       */
      public int indexLowest(int low, int high) {
          return 0;
      }
  
      /**
       * Sorts the cards (in place) using selection sort.
       */
      public void selectionSort() {
      }
  
      /**
       * Returns a subset of the cards in the deck.
       */
      public Deck subdeck(int low, int high) {
          Deck sub = new Deck(high - low + 1);
          for (int i = 0; i < sub.cards.length; i++) {
              sub.cards[i] = this.cards[low + i];
          }
          return sub;
      }
  
      /**
       * Combines two previously sorted subdecks.
       */
      public static Deck merge(Deck d1, Deck d2) {
          return null;
      }
  
      /**
       * Returns a sorted copy of the deck using merge sort.
       */
      public Deck mergeSort() {
          return this;
      }
  
      /**
       * Reorders the cards (in place) using insertion sort.
       */
      public void insertionSort() {
      }
  
  }
  