public class WordGram {
    private String[] myWords;
    private int myHash;

    public WordGram(String[] source, int start, int size) {
        myWords = new String[size];
        System.arraycopy(source, start, myWords, 0, size);
        myHash = hashCode();
    }

    public String wordAt(int index) {
        if (index < 0 || index >= myWords.length) {
            throw new IndexOutOfBoundsException("bad index in wordAt "+index);
        }
        return myWords[index];
    }

    public int length(){
        // TODO: Complete this method
        return myWords.length;
    }

    public String toString(){
        String ret = "";
        for (int k =0; k<myWords.length; k++) {
            ret += myWords[k] + " " ;
        }// TODO: Complete this method

        return ret.trim();
    }

    public boolean equals(Object o) {
        WordGram other = (WordGram) o;
        if (length() != other.length()){
            return false;
        }
        for (int k =0; k < myWords.length; k++) {
            if(!myWords[k].equals(other.wordAt(k))){
                return false;
            }
        }// TODO: Complete this method
        return true;

    }

    public WordGram shiftAdd(String word) {	
        WordGram out = new WordGram(myWords, 0, myWords.length);
        for (int k =0; k < myWords.length-1; k++) {
            myWords[k]= myWords[k+1];
        }
        myWords[myWords.length - 1] = word;
        // shift all words one towards 0 and add word at the end. 
       // you lose the first word
        // TODO: Complete this method
        return out;
    }
    public int hashCode() {

        String s = "";
        for (int k = 0; k < myWords.length; k++){
            s += myWords[k];
        }
        //System.out.println ("s: " + s);  
        return s.hashCode();
    }

}