@SuppressWarnings({"unchecked", "unchecked"})
  public static void main(String[] args) {
    Vector<String> v = new Vector<String>();
    DataInputStream inn;
    PrintStream out;
    Indexer w = new Indexer("myhash");
    try {
      FileInputStream indexSource = new FileInputStream("foo.txt");
      w.restore(indexSource);
      // w.disp();
    } catch (IOException e) {
      System.out.println(e.toString());
    }
    try {
      ServerSocket serv = new ServerSocket(4402);
      System.out.println(serv.getInetAddress());
      System.out.println("server started");
      while (true) {

        Socket client = serv.accept();
        System.out.println("Just connected to " + client.getRemoteSocketAddress());

        inn = new DataInputStream(client.getInputStream());

        System.out.println("client IP : " + client.getInetAddress());
        String ob = inn.readLine();
        System.out.println("ob is " + ob);
        String[] h = ob.split(" ");
        for (String i : h) {
          v.addElement(i.toLowerCase());
        }

        // Take care to use the right usage of the Index structure
        // hash - Dictionary Structure based on a Hashtable or HashMap from the Java collections
        // list - Dictionary Structure based on Linked List
        // myhash - Dictionary Structure based on a Hashtable implemented by the students
        // bst - Dictionary Structure based on a Binary Search Tree implemented by the students
        // avl - Dictionary Structure based on AVL Tree implemented by the students

        // System.out.println(perform);
        System.out.println("search request for : " + v.toString());

        // w.disp();

        ObjectIterator<vecnod> i = w.retrievePages(new ObjectIterator<String>(v));

        Vector<vecnod> no_dup_vec = new Vector<vecnod>();
        Vector<vecnod> dup_vec = new Vector<vecnod>();

        int argcount = v.size();

        v.clear();

        if (i == null) {
          System.out.println("Search complete.  0  hits found.");
          return;
        }
        vecnod temp = new vecnod();
        System.out.println("Search results:");

        while (i.hasNext()) {

          temp = i.next();
          String s = temp.url.toString();

          int bc = 1;
          for (int j = 0; j < s.length(); j++) {
            if (s.charAt(j) == '/') bc++;
          }
          temp.freq = temp.freq * 100 * 1 / (bc - 2); // ressigning rank
          System.out.println("URL is: " + s + " Rank is: " + temp.freq);
        }
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public String Play(String input) {
    Vector<String> v = new Vector<String>();

    String output = "";
    Indexer w = new Indexer("myhash");
    try {
      FileInputStream indexSource = new FileInputStream("foo.txt");
      w.restore(indexSource);
      // w.disp();
    } catch (IOException e) {
      System.out.println(e.toString());
    }
    try {

      String ob = input;
      System.out.println("ob is " + ob);
      String[] h = ob.split(" ");
      for (String i : h) {
        v.addElement(i.toLowerCase());
      }

      // Take care to use the right usage of the Index structure
      // hash - Dictionary Structure based on a Hashtable or HashMap from the Java collections
      // list - Dictionary Structure based on Linked List
      // myhash - Dictionary Structure based on a Hashtable implemented by the students
      // bst - Dictionary Structure based on a Binary Search Tree implemented by the students
      // avl - Dictionary Structure based on AVL Tree implemented by the students

      // System.out.println(perform);
      System.out.println("search request for : " + v.toString());

      // w.disp();

      ObjectIterator<vecnod> i = w.retrievePages(new ObjectIterator<String>(v));

      Vector<vecnod> no_dup_vec = new Vector<vecnod>();
      Vector<vecnod> dup_vec = new Vector<vecnod>();

      int argcount = v.size();

      v.clear();

      if (i == null) {
        System.out.println("Search complete.  0  hits found.");
        return "";
      }
      vecnod temp = new vecnod();
      System.out.println("Search results:");

      while (i.hasNext()) {

        temp = i.next();
        String s = temp.url.toString();

        int bc = 1;
        for (int j = 0; j < s.length(); j++) {
          if (s.charAt(j) == '/') bc++;
        }
        temp.freq = temp.freq * 100 * 1 / (bc - 2); // ressigning rank
        // System.out.println("URL is: "+s+" Rank is: "+temp.freq);
        output = output + s + "\n";
      }

    } catch (Exception e) {
      e.printStackTrace();
    }
    return output;
  }