duree_mois=[0,31,28,31,30,31,30,31,31,30,31,30,31]
mois=["","janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]
semaine=["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"]

def bissextile(annee):
    return (annee%4 == 0 and annee%100!=0) or annee%400 == 0
        
def jour_semaine(jour, mois, annee):
    c = (14-mois)//12
    a = annee - c
    m = mois + 12*c - 2
    j = (jour + a + a//4 - a //100 + a//400 + (31*m)//12)%7
    return semaine[j]

def paques(M):
    n = M-1900
    a = n%19
    b = (a*7+1)//19
    c = (11*a-b+4)%29
    d = n//4
    e = (n-c+d+31)%7
    P=25-c-e
    if P>0:
        return P,4
    else :
        return 31+P,3

def date_2_numero(j,m,a):
    # renvoie le numéro du jour de l'année a
    n=j
    mois=1
    while mois<m:
        n += duree_mois[mois]
        if mois==2 and bissextile(a):
            n+=1
        mois += 1
    return n

def numero_2_date(n,a):
    # renvoie la date correspondant au numéro du jour de l'année a
    j=n
    m=1
    duree = 31
    while j>duree:
        j -= duree
        m+=1
        duree = duree_mois[m]
        if duree == 28 and bissextile(a):
            duree = 29
    return j,m

annee = int(input("Donnez une année : "))
jour_paques, mois_paques = paques(annee)
n_paques = date_2_numero(jour_paques, mois_paques, annee)

print("Jours fériés en",annee)
print("Nouvel-An :",jour_semaine(1,1,annee),"1er janvier")
j,m=numero_2_date(n_paques-47, annee)
print("Mardi Gras :",jour_semaine(j,m,annee),j,mois[m])
j,m=numero_2_date(n_paques-2, annee)
print("Vendredi Saint :",jour_semaine(j,m,annee),j,mois[m])
print("Pâques :",jour_semaine(jour_paques,mois_paques,annee),jour_paques, mois[mois_paques])
j,m=numero_2_date(n_paques+39, annee)
print("Ascension :",jour_semaine(j,m,annee),j,mois[m])
j,m=numero_2_date(n_paques+49, annee)
print("Pentecôte :",jour_semaine(j,m,annee),j,mois[m])
j,m=numero_2_date(n_paques+60, annee)
print("Fête-Dieu :",jour_semaine(j,m,annee),j,mois[m])  
print("Fête nationale :",jour_semaine(1,8,annee),"1er août")
print("Toussaint :",jour_semaine(1,11,annee),"1er novembre")
print("Noël :",jour_semaine(25,12,annee),"25 décembre")

