DataTable FormatMonitor(Contest con)
        {
            List <int> pids = new List <int>();

            DataTable mon = new DataTable();

            mon.Columns.Add("Имя участника");
            foreach (Problem p in Problem.GetProblems(con.ID))
            {
                mon.Columns.Add(p.ShortName);
                pids.Add(p.ID);
            }
            mon.Columns.Add("Всего решено");
            mon.Columns.Add("Время");
            mon.Columns.Add("Место");

            List <UserData> uds = new List <UserData>(data.Values);

            uds.Sort();

            for (int i = 0; i < uds.Count; i++)
            {
                DataRow dr = mon.NewRow();
                dr["Имя участника"] = uds[i].DisplayName;
                for (int j = 0; j < pids.Count; j++)
                {
                    if (uds[i].ProblemsInfo[pids[j]].Result > 0)
                    {
                        // Write a result to the problem's column
                        dr[1 + j] = "<span style='color:blue;'>+";
                        if (uds[i].ProblemsInfo[pids[j]].Result != 1)
                        {
                            dr[1 + j] += (uds[i].ProblemsInfo[pids[j]].Result - 1).ToString();
                        }
                        dr[1 + j] += "</span><span style='font-size:smaller;display:block;'>(";
                        dr[1 + j] += TimeUtils.BeautifyTimeSpan(
                            TimeUtils.ZeroTimeSpan(uds[i].ProblemsInfo[pids[j]].AcTime - con.Beginning), true);
                        dr[1 + j] += ")</span>";
                    }
                    else if (uds[i].ProblemsInfo[pids[j]].Result < 0)
                    {
                        dr[1 + j]  = "<span style='color:red;'>";
                        dr[1 + j] += uds[i].ProblemsInfo[pids[j]].Result.ToString();
                        dr[1 + j] += "</span>";
                    }
                    else
                    {
                        dr[1 + j] = "";
                    }
                }

                dr["Всего решено"] = uds[i].SolvedCount;
                dr["Время"]        = uds[i].Penalty;
                dr["Место"]        = i + 1;
                mon.Rows.Add(dr);
            }
            return(mon);
        }