public static Link[] GetRightElements(Link startLink, Link rightLink)
        {
            var result = new Link[4];

            TryStepRight(startLink, rightLink, result, 0);

            startLink.WalkThroughReferersByTarget(couple =>
                {
                    if (couple.Linker == Net.And)
                        if (TryStepRight(couple, rightLink, result, 2))
                            return Link.Stop;

                    return Link.Continue;
                });

            return result;
        }
        public static bool TryStepLeft(Link startLink, Link leftLink, Link[] result, int offset)
        {
            int added = 0;

            startLink.WalkThroughReferersByTarget(couple =>
                {
                    if (couple.Linker == Net.And)
                    {
                        var coupleSource = couple.Source;
                        if (coupleSource == leftLink)
                        {
                            result[offset] = couple;
                            if (++added == 2)
                                return Link.Stop;
                        }
                        else if (coupleSource.Linker == Net.And && coupleSource.Target == leftLink)
                        {
                            result[offset + 1] = couple;
                            if (++added == 2)
                                return Link.Stop;
                        }
                    }

                    return Link.Continue;
                });

            return added > 0;
        }