#include <iostream>

using namespace std ;

class myDate
{
	public :
		myDate() ;
		myDate(int X) ;
		myDate( int year, int month, int day) ;
		int dayOfYear() ;
		bool isLeap(int year) ;
		int Year() ;
		int Month() ;
		int Day() ;
		friend const int operator -(const myDate& day1 , const myDate& day2) ;	
	private :	
		int YEAR ;
		int MONTH ;
		int DAY ;
		int A ;	
} ;

int main()
{
	myDate D1() , D2(2015,12,31) , D3(2016,3,1) ;
	
	int X ;
	
	X = D2 - D3 ;
	
	cout<<"D2 : "<<D2.dayOfYear()<<endl ;
	
	cout<<"D3 : "<<D3.dayOfYear()<<endl ;
	
	cout<<endl<<X ;	
}

myDate::myDate() : YEAR(0) , MONTH(0) , DAY(0) 
{}

myDate::myDate( int year, int month, int day) : YEAR(year) , MONTH(month) , DAY(day) 
{}

int myDate::Day()
{
	return DAY ;
}

bool myDate::isLeap(int year)  
{
     if( year % 400 == 0 )
          return 1 ;
     else if( year % 4 == 0 && year % 100 != 0 )
          return 1 ;
     else
          return 0 ;
}

int myDate::dayOfYear()
{
	int x = 0 ;
		
	switch(MONTH-1)
	{
		case 12 : x+=31 ; 
		case 11 : x+=30 ;
		case 10 : x+=31 ;
		case 9 : x+=30 ;
		case 8 : x+=31 ;
		case 7 : x+=31 ;
		case 6 : x+=30 ;
		case 5 : x+=31 ;
		case 4 : x+=30 ;
		case 3 : x+=31 ;
		case 2 : 
		{
			if(isLeap(YEAR) == true)
				x+=29 ;
			if(isLeap(YEAR) == false)
				x+=28 ;	
		}
		case 1 : x+=31 ;
	} 
		
		x=x+DAY ;
		
		return x ;		
}

const int operator -(const myDate& day1 ,  const myDate& day2)
{
	myDate DATE ;
	
	int x,y,z,LeaPz = 0 ;
	
	int i ;
	
	int X ;
	
	x = day1.dayOfYear() ;
	y = day2.dayOfYear() ;
	
	if( day1.YEAR == day2.YEAR )
	{
		X = x-y ;
		if(X < 0)
			X = -X ;
	}
	
	if( day1.YEAR - day2.YEAR > 0 )
	{
		z = day1.YEAR - day2.YEAR - 1 ;
		
		for( i = day2.YEAR ; i < day1.YEAR ; i++ )
		{
			if( DATE.isLeap(i) ==1 )
				LeaPz ++ ; 	
		}
		
		if(DATE.isLeap(day2.YEAR) ==1 )
			X = (366-y) + x + 365*(z-LeaPz) + 366*LeaPz ;
	
		else
			X = (365-y) + x + 365*(z-LeaPz) + 366*LeaPz ;	
	}
	
	if( day1.YEAR - day2.YEAR < 0 )
	{
		z = day2.YEAR - day1.YEAR - 1 ;

		for( i = day1.YEAR ; i < day2.YEAR ; i++ )
		{
			if( DATE.isLeap(i) ==1 )
				LeaPz ++ ; 	
		}
				
		if(DATE.isLeap(day1.YEAR) == 1 )
			X = (365-x) + y + 365*(z-LeaPz) + 366*LeaPz ; 
				  
		else
			X = (365-x) + y + 365*(z-LeaPz) + 366*LeaPz ;	
	}
	return X ;	
}