rework range concepts to distinguish input from output ranges, implement fill algorithm and tests