public RectangularStep(int width, int height, IList<RectangularStep> upstream)
: base(width * height, upstream == null ? null : upstream.ToList<Step>())
{
if (width <= 0 || height <= 0) throw new ArgumentException();
this.Width = width;
this.Height = height;
if (upstream != null)
this.Upstream = new ReadOnlyCollection<RectangularStep>(upstream);
else
this.Upstream = null;
}