using System.Collections.Generic;
using System.Globalization;
static List<DateTime[]> result = new List<DateTime[]>();
static int intervalsCount = 0;
static void Main(string[] args)
type = Console.ReadLine();
Console.Write("startDate endDate: ");
dates = Console.ReadLine().Split(" ");
throw new Exception("endDate is missing");
CultureInfo culture = new CultureInfo("ru-RU");
if (!DateTime.TryParse(dates[0], culture, DateTimeStyles.None, out startDate))
throw new Exception("startDate is invalid");
if (!DateTime.TryParse(dates[1], culture, DateTimeStyles.None, out endDate))
throw new Exception("endDate is invalid");
throw new Exception("startDate > endDate");
IntervalByWeeks(startDate, endDate);
IntervalByMonths(startDate, endDate);
IntervalByQuarters(startDate, endDate);
IntervalByYears(startDate, endDate);
IntervalByReviews(startDate, endDate);
Console.WriteLine("unknown type");
Console.WriteLine(intervalsCount);
void Print(DateTime[] interval)
Console.WriteLine($"{interval[0].ToString("yyyy-MM-dd")} {interval[1].ToString("yyyy-MM-dd")}");
static void IntervalByReviews(DateTime startDate, DateTime endDate)
for (DateTime i = startDate; i <= endDate;)
DateTime[] interval = new DateTime[2];
if (i.Month >= 4 && i.Month <= 9)
i = new DateTime(i.Year, 9, DateTime.DaysInMonth(i.Year, 9));
i = new DateTime(i.Year + 1, 3, DateTime.DaysInMonth(i.Year + 1, 3));
static void IntervalByQuarters(DateTime startDate, DateTime endDate)
for (DateTime i = startDate; i <= endDate;)
DateTime[] interval = new DateTime[2];
int monthsToAdd = 3 - (i.Month % 3);
i = i.AddMonths(monthsToAdd);
i = new DateTime(i.Year, i.Month, DateTime.DaysInMonth(i.Year, i.Month));
static void IntervalByYears(DateTime startDate, DateTime endDate)
for (DateTime i = startDate; i <= endDate;)
DateTime[] interval = new DateTime[2];
i = new DateTime(i.Year, 12, 31);
static void IntervalByWeeks(DateTime startDate, DateTime endDate)
for (DateTime i = startDate; i <= endDate;)
DateTime[] interval = new DateTime[2];
int weekDay = (int) i.DayOfWeek;
int daysToAdd = 7 - weekDay;
interval[1] = i.AddDays(daysToAdd);
if (interval[1] >= endDate)
i = interval[1].AddDays(1);
static void IntervalByMonths(DateTime startDate, DateTime endDate)
for (DateTime i = startDate; i <= endDate; i = i.AddMonths(1))
DateTime[] interval = new DateTime[2];
interval[0] = new DateTime(i.Year, i.Month, 1);
if (i.Month == endDate.Month)
interval[1] = new DateTime(i.Year, i.Month, DateTime.DaysInMonth(i.Year, i.Month));