'''simple docstring'''

import argparse
import datetime



def 							UpperCamelCase__			(			a__      ):


						'''simple docstring'''






						_lowerCAmelCase										={
						    '0': 'Sunday',
						    '1': 'Monday',
						    '2': 'Tuesday',
						    '3': 'Wednesday',
						    '4': 'Thursday',
						    '5': 'Friday',
						    '6': 'Saturday',
						}

						_lowerCAmelCase										={0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 0}

						# Validate
						if not 0 < len(a__      ) < 1_1:
												raise ValueError('Must be 10 characters long'      )

						# Get month
						_lowerCAmelCase										=int(date_input[0] + date_input[1]      )
						# Validate
						if not 0 < m < 1_3:
												raise ValueError('Month must be between 1 - 12'      )

						_lowerCAmelCase										=date_input[2]
						# Validate
						if sep_a not in ["-", "/"]:
												raise ValueError('Date separator must be \'-\' or \'/\''      )

						# Get day
						_lowerCAmelCase										=int(date_input[3] + date_input[4]      )
						# Validate
						if not 0 < d < 3_2:
												raise ValueError('Date must be between 1 - 31'      )

						# Get second separator
						_lowerCAmelCase										=date_input[5]
						# Validate
						if sep_a not in ["-", "/"]:
												raise ValueError('Date separator must be \'-\' or \'/\''      )

						# Get year
						_lowerCAmelCase										=int(date_input[6] + date_input[7] + date_input[8] + date_input[9]      )
						# Arbitrary year range
						if not 4_5 < y < 8_5_0_0:
												raise ValueError(
												    'Year out of range. There has to be some sort of limit...right?'      )

						# Get datetime obj for validation
						_lowerCAmelCase										=datetime.date(int(a__      )			,      int(a__      )			,      int(a__      )      )

						# Start math
						if m <= 2:
												_lowerCAmelCase										=y - 1
												_lowerCAmelCase										=m + 1_2
						# maths var
						_lowerCAmelCase										=int(str(a__      )[:2]      )
						_lowerCAmelCase										=int(str(a__      )[2:]      )
						_lowerCAmelCase										=int(2.6 * m - 5.39      )
						_lowerCAmelCase										=int(c / 4      )
						_lowerCAmelCase										=int(k / 4      )
						_lowerCAmelCase										=int(d + k      )
						_lowerCAmelCase										=int(t + u + v + x      )
						_lowerCAmelCase										=int(z - (2 * c)      )
						_lowerCAmelCase										=round(w % 7      )
						# End math

						# Validate math
						if f != convert_datetime_days[dt_ck.weekday()]:
												raise AssertionError('The date was evaluated incorrectly. Contact developer.'      )

						# Response
						_lowerCAmelCase										=F'''Your date {date_input}, is a {days[str(a__      )]}!'''
						return response


if __name__ == "__main__":
							import doctest

							doctest.testmod()
							lowercase_     		= argparse.ArgumentParser(
							    description=(
							        '''Find out what day of the week nearly any date is or was. Enter '''
							        '''date as a string in the mm-dd-yyyy or mm/dd/yyyy format'''
							    )
							)
							parser.add_argument(
							    '''date_input''', type=str, help='''Date as a string (mm-dd-yyyy or mm/dd/yyyy)'''
							)
							lowercase_     		= parser.parse_args()
							zeller(args.date_input)






'''simple docstring'''

def 							UpperCamelCase__			(			a__      ):


						'''simple docstring'''






						_lowerCAmelCase										=set()
						# To detect a back edge, keep track of vertices currently in the recursion stack
						_lowerCAmelCase										=set()
						return any(
						    node not in visited and depth_first_search(a__			,      a__			,      a__			,      a__      )
						    for node in graph      )



def 							UpperCamelCase__			(			a__			,      a__			,      a__			,      a__      ):


						'''simple docstring'''






						visited.add(a__      )
						rec_stk.add(a__      )

						for node in graph[vertex]:
												if node not in visited:
																		if depth_first_search(a__			,      a__			,      a__			,      a__      ):
																								return True
												elif node in rec_stk:
																		return True

    # The node needs to be removed from recursion stack before function ends
						rec_stk.remove(a__      )
						return False


if __name__ == "__main__":
							from doctest import testmod

							testmod()





