boolean place(int x, int y, Player p)
{
	boolean isValid = false;
	if((board[x][y] != empty) || !inRange(x, y))
		return false;
	for(int i = -1; i < 2; i++)
		for(int j = -1; j < 2; j++)
			if(inRange((x+i), y+j) && (board[x+i][y+j] != p)) //will recurse on empty spaces and fail immediately
				isValid = isValid || check((x+i), (y+j), i, j, p);
	if(isValid)
		board[x][y] = p;
	return isValid;
}
boolean check(int x, int y, int dx, int dy, Player p)
{
	if((board[x][y] == empty) || !inRange(x, y))
		return false;
	if(board[x][y] == p)
		return true;
	if(check((x + dx), (y + dy), 
dx, dy, p))
	{
		board[x][y] = p;
		return true;
	}
	else
		return false;
}
boolean inRange(int x, int y)
{ 
	return ((x >= 0) && (x < board.length) && (y >= 0) && (y < board[0].length));
}