public BigInteger uniqueHashCode() {
		if(hash == null) {
			hash = (player == Player.PLAYER1 ? BigInteger.ZERO : BigInteger.ONE);
			int i, j, idx = 0;
			if(multiplier == null) {
				BigInteger three = new BigInteger("3");
				multiplier = new BigInteger[64];
				multiplier[0] = three;
				for(i=1; i<64; i++)
					multiplier[i] = multiplier[i-1].multiply(three);
			}
			for(i=0; i<8; i++) {
				for(j=0; j<8; j++) {
					Player p = getSquare(i, j);
					if(p == Player.EMPTY)
						idx++;
					else
						hash.add(multiplier[idx++].multiply(p == Player.PLAYER1 ? BigInteger.ONE : two));
				}
			}
		}
		return hash;
	}