avoid overwriting built-in range()