s =PolyCurve.ByJoinedCurves(List.Shuffle((Rectangle.ByWidthLength(10..20..#5,5).Translate(0..40..#5,0..40..#5,0))).Explode());def cns(cr:var[]..[], oc:var[]..[]){ a =List.SetDifference(List.RestOfItems(cr),oc); b = cr[0].DistanceTo(a); c =List.SortByKey(a,b)["sorted list"];returnList.FirstItem(c);};s;nearestPairs = [Imperative]{ t = []; i =0;while (List.Count(t)<List.Count(s)) { d =cns(List.ShiftIndices(s,-i),t); t =List.AddItemToEnd(d,t); i = i +1; }returnList.Transpose([s,t]);};