public ushort DSliceCoordS()
        {
            List <byte> arr = new List <byte>(4);
            int         i, j, s, x = 0;

            foreach (Cubie e in edges)
            {
                if (DSlice.Contains(e.pos))
                {
                    arr.Add(e.pos);
                }
            }

            for (i = 3; i > 0; i--)
            {
                s = 0;
                for (j = i; j >= 0; j--)
                {
                    if (arr[j] > arr[i])
                    {
                        s++;
                    }
                }

                x = (x + s) * i;
            }

            return((ushort)(DSliceCoord() * 24 + x));
        }
        public ushort DSliceCoord()
        {
            int k = -1, i = 0, s = 0;

            foreach (Cubie e in edges.rotate(4))
            {
                if (DSlice.Contains(e.pos))
                {
                    k += 1;
                }
                else if (k != -1)
                {
                    s += Tools.nChooseK(i, k);
                }

                i += 1;
            }

            return((ushort)s);
        }