public static long DoSo(KET_QUA_XO_SO K, long so)
    {
        long kq = 0;

        foreach (GIAI x in K.Giai)
        {
            kq += XuLyGiai.DoSo(x, so);
        }
        return(kq);
    }
    public static String XuatChuoi(KET_QUA_XO_SO K)
    {
        String kq = K.Ten;

        foreach (GIAI x in K.Giai)
        {
            kq += "\n" + XuLyGiai.XuatChuoi(x);
        }
        return(kq);
    }
    public static Boolean KiemTra(String Chuoi)
    {
        Boolean flag = true;

        String[] M = Chuoi.Split(new String[] { ChuoiPhanCach },
                                 StringSplitOptions.None);
        flag = M.Length >= 2;
        for (int i = 1; i < M.Length; i++)
        {
            flag = XuLyGiai.KiemTra(M[i]);
            if (flag == false)
            {
                break;
            }
        }
        return(flag);
    }
    public static KET_QUA_XO_SO KhoiTao(String Chuoi)
    {
        KET_QUA_XO_SO kq;

        kq.Ten  = "";
        kq.Giai = null;
        if (KiemTra(Chuoi))
        {
            String[] M = Chuoi.Split(new String[] { ChuoiPhanCach },
                                     StringSplitOptions.None);
            kq.Ten  = M[0].Trim();
            kq.Giai = new GIAI[M.Length - 1];
            for (int i = 1; i < M.Length; i++)
            {
                kq.Giai[i - 1] = XuLyGiai.KhoiTao(M[i]);
            }
        }
        return(kq);
    }