private void ExecuteStartCommand()
        {
            BeginStack.Clear();
            AuxStack.Clear();
            EndStack.Clear();
            IsSolved = false;

            InitPushIntoBeginStack();
            PegState = SourcePegState.BEGIN;
            UpdateCollectionAsync();
            SolveTowersOfHanoi();
        }
        async Task UpdateCollectionAsync()
        {
            Task t = Task.Delay(3000);

            BeginCollection.Clear();
            AuxCollection.Clear();
            EndCollection.Clear();

            BeginStack.ToList().ForEach((x) => BeginCollection.Add(x));
            AuxStack.ToList().ForEach((x) => AuxCollection.Add(x));
            EndStack.ToList().ForEach((x) => EndCollection.Add(x));
            await t;
        }
        async Task SolveTowersOfHanoi()
        {
            if (IsSolved)
            {
                return;
            }

            await UpdateCollectionAsync();

            //Done State
            if (EndStack.Count == INIT_DISK_LEN)
            {
                IsSolved = true;
                return;
            }


            switch (PegState)
            {
            case SourcePegState.BEGIN:

                // END , AUX
                if (BeginStack.Count > 0)
                {
                    if (EndStack.Count == 0 || CanPush(BeginStack.Peek(), EndStack.Peek()))
                    {
                        EndStack.Push(BeginStack.Pop());
                        SolveTowersOfHanoi();
                    }
                    else if (AuxStack.Count == 0 || CanPush(BeginStack.Peek(), AuxStack.Peek()))
                    {
                        AuxStack.Push(BeginStack.Pop());
                        //PegState = SourcePegState.BEGIN;
                        SolveTowersOfHanoi();
                    }
                    else
                    {
                        PegState = SourcePegState.END;
                        SolveTowersOfHanoi();
                    }
                }
                else
                {
                    PegState = SourcePegState.END;
                    SolveTowersOfHanoi();
                }
                break;

            case SourcePegState.AUXILLARY:

                // BEGIN, END
                if (AuxStack.Count > 0)
                {
                    if (BeginStack.Count == 0 || CanPush(AuxStack.Peek(), BeginStack.Peek()))
                    {
                        BeginStack.Push(AuxStack.Pop());
                        SolveTowersOfHanoi();
                    }
                    else if (EndStack.Count == 0 || CanPush(AuxStack.Peek(), EndStack.Peek()))
                    {
                        EndStack.Push(AuxStack.Pop());
                        SolveTowersOfHanoi();
                    }
                    else
                    {
                        PegState = SourcePegState.BEGIN;
                        SolveTowersOfHanoi();
                    }
                }
                else
                {
                    PegState = SourcePegState.BEGIN;
                    SolveTowersOfHanoi();
                }


                break;

            case SourcePegState.END:
                //Lock State
                if (EndStack.Count > 0)
                {
                    //max elem
                    if (EndStack.Peek() == 3)     //&& EndStack.Count == 1)
                    {
                        //state transition to Aux
                        PegState = SourcePegState.AUXILLARY;
                        SolveTowersOfHanoi();
                        return;
                    }
                }

                //AUX, BEGIN
                if (EndStack.Count > 0)
                {
                    if (AuxStack.Count == 0 || CanPush(EndStack.Peek(), AuxStack.Peek()))
                    {
                        AuxStack.Push(EndStack.Pop());
                        SolveTowersOfHanoi();
                    }
                    else if (BeginStack.Count == 0 || CanPush(EndStack.Peek(), BeginStack.Peek()))
                    {
                        BeginStack.Push(EndStack.Pop());
                        SolveTowersOfHanoi();
                    }
                    else
                    {
                        PegState = SourcePegState.BEGIN;
                        SolveTowersOfHanoi();
                    }
                }
                else
                {
                    PegState = SourcePegState.BEGIN;
                    SolveTowersOfHanoi();
                }


                break;

            default:
                break;
            }
        }