PROG0223 - Monthly calendar

Draw up a monthly calendar for a given month in a given year. It is not allowed to use modules from The Python Standard Library.
monthly calendar

maandkalender

The first line of the calendar is the English name of the month (written in lowercase letters), followed by a space and the year. The entire text should be centered and written over about 20 positions. The next line contains the consecutive weekdays, each shortened to two small letters, starting with Sunday and separated by spaces. Then follow all dates of the month on different lines, neatly aligned with the correct day on which these dates fall. The days are always right aligned and written over two positions, with a space between the different days as it was also used for the weekdays in the header. The output of the calendar contains no blank lines, and there are never spaces at the end of a line.

For a given day $d$, month $m$ and year $j$ it can be calculated which weekday it is in the following way:
\[
\begin{array}{rcl}
j_0 & = & j - \frac{(14 - m)}{12} \\
x  & = & j_0 + \frac{j_0}{4} - \frac{j_0}{100} + \frac{j_0}{400} \\
m_0 & = & m + 12 \left(\frac{14 - m}{12}\right) - 2 \\
d_0 & = & (d + x + \frac{31m_0}{12})\!\!\!\mod 7
\end{array}
\] All fractions represent divisions (quotient) and mod is the modulo operator (remainder after integer division). Ultimately, the value $d_0$ is the weekday, in which case the value 0 stands for Sunday, 1 for Monday, 2 for Tuesday, and so on.

When drawing up the calendar, remember that February has a different number of days, depending on whether the specified year is a leap year or not

Input

The first line of the input contains an integer $t$ that indicates how many test cases there are. The next $t$ lines each contain two integers $m$ and $j$, which are separated by a single space. These respectively represent the month $m$ and the year $j$ for which a calendar needs to be issued.
output

Output

For each test case a calendar must be drawn up for the month $m$ and the year $j$. A blank line should always be present between two consecutive calendars.

Example

Input:

3
2 2012
3 2012
2 2013

Output:

   february 2012
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29

     march 2012
Su Mo Tu We Th Fr Sa
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

   february 2013
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28

Stel een maandkalender op voor een gegeven maand in een gegeven jaar. Hierbij is het niet toegelaten om gebruik te maken van modules uit The Python Standard Library.

maandkalender

De eerste regel van de kalender moet de nederlandstalige naam van de maand (uitgeschreven in kleine letters) bevatten, gevolgd door een spatie en het jaartal, waarbij de volledige tekst gecentreerd wordt uitgeschreven over 20 posities. De volgende regel bevat de opeenvolgende weekdagen, telkens afgekort tot twee kleine letters, startend met zondag en gescheiden door spaties. Daarna volgen op verschillende regels alle dagen van de maand, netjes uitgelijnd onder de juiste weekdag waarop deze dagen vallen. De dagen worden telkens rechts uitgelijnd over twee posities uitgeschreven, met een spatie tussen de verschillende dagen zoals dat ook voor de weekdagen in de hoofding gebruikt werd. De uitvoer van de kalender bevat geen lege regels, en er staan nooit spaties op het einde van een regel.

Voor een gegeven dag $d$, maand $m$ en jaar $j$ kan op de volgende manier berekend worden op welke weekdag deze dag valt.
\[
\begin{array}{rcl}
j_0 & = & j - \frac{(14 - m)}{12} \\
x   & = & j_0 + \frac{j_0}{4} - \frac{j_0}{100} + \frac{j_0}{400} \\
m_0 & = & m + 12 \left(\frac{14 - m}{12}\right) - 2 \\
d_0 & = & (d + x + \frac{31m_0}{12})\!\!\!\mod 7
\end{array}
\] Hierbij stellen alle breuken gehele delingen voor (quotiënt) en staat mod voor de modulo operator (rest na gehele deling). Uiteindelijk geeft de waarde $d_0$ de weekdag aan, waarbij de waarde 0 staat voor zondag, 1 voor maandag, 2 voor dinsdag, enzoverder.

Hou er bij het uitschrijven van de kalender ook rekening mee dat de maand februari een verschillend aantal dagen telt, afhankelijk van het feit of het opgegeven jaar een schrikkeljaar is of niet.

Invoer

De eerste regel van de invoer bevat een natuurlijk getal $t$ dat aangeeft hoeveel testgevallen er zijn. De volgende $t$ regels bevatten telkens twee natuurlijke getallen $m$ en $j$ die van elkaar worden gescheiden door één enkele spatie. Deze geven respectievelijk de maand $m$ en het jaartal $j$ aan waarvoor een kalender moet uitgeschreven worden.

Uitvoer

Voor elk testgeval moet de kalender voor de maand $m$ en het jaar $j$ uitgeschreven worden. Tussen twee opeenvolgende kalenders moet telkens een lege regel uitgeschreven worden.

Voorbeeld

Invoer:

3
2 2012
3 2012
2 2013

Uitvoer:

   februari 2012
zo ma di wo do vr za
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29

     maart 2012
zo ma di wo do vr za
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

   februari 2013
zo ma di wo do vr za
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28

Added by:Peter Dawyndt
Date:2012-02-11
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.