// Returns (i, j) that, i is the first element that the action doesn't stablize.
            // j is what it maps to at i. Obviously j > i. Note: returning (-1, -1) means the
            // action stablizes all
            public Tuple <int, int> GetActionPair(CubeAction action)
            {
                int pair_i = -1;
                int pair_j = -1;

                var actionMap = action.GetAccelerationMap();

                for (int idxInStablizerOrder = 0; idxInStablizerOrder < StablizingOrder.Count; idxInStablizerOrder++)
                {
                    int idxInActionMap = StablizingOrder[idxInStablizerOrder];
                    if (actionMap.ColorMap[idxInActionMap] == idxInActionMap)
                    {
                        continue;
                    }

                    pair_i = idxInStablizerOrder;
                    int pair_j_inActionMap = actionMap.ColorMap[idxInActionMap];
                    pair_j = IdxInStablizingOrder(pair_j_inActionMap);

                    Utils.DebugAssert(pair_j > pair_i);
                    break;
                }

                return(new Tuple <int, int>(pair_i, pair_j));
            }