import java.io.*; class Calendar { static void make_calendar (FileWriter f, int y, int m, int n, int d1) throws Exception { System.out.println("Making calendar for month " + m + " in year " + y); System.out.println("(It started day " + d1 + " and has " + n + " days)"); final int max_r = 29, max_c = 44; char a[][] = new char[max_c][max_r]; // Initialize a: int ic, ir; for (ir = 0; ir < max_r; ++ir) for (ic = 0; ic < max_c; ++ic) a[ic][ir] = ' '; for (ir = 0; ir < max_r; ++ir) { a[0][ir] = a[max_c-1][ir] = '|'; for (ic = 4; ic < max_c-4; ic += 5) a[ic][ir] = '|'; } for (ir = 0; ir < max_r; ir += 4) { for (ic = 4; ic < max_c-4; ++ic) a[ic][ir] = (a[ic][ir]=='|' ? '+' : '-'); } a[ 6][2] = 'M'; a[ 7][2] = 'o'; a[11][2] = 'T'; a[12][2] = 'u'; a[16][2] = 'W'; a[17][2] = 'e'; a[21][2] = 'T'; a[22][2] = 'h'; a[26][2] = 'F'; a[27][2] = 'r'; a[31][2] = 'S'; a[32][2] = 'a'; a[36][2] = 'S'; a[37][2] = 'u'; // Fill in the dates: int dx = -d1, last_r = 0; for (ir = 1; ir <= 6; ++ir) { for (ic = 1; ic <= 7; ++ic) { ++dx; if (dx <= 0 || dx > n) continue; String dig = "" + dx; if (dig.length() == 1) { a[5*ic+2][4*ir+2] = dig.charAt(0); } else { a[5*ic+1][4*ir+2] = dig.charAt(0); a[5*ic+2][4*ir+2] = dig.charAt(1); } last_r = 4*ir+4; } } // Fill in the month and the year: String m_name[] = new String[12]; m_name[ 0] = "January"; m_name[ 1] = "February"; m_name[ 2] = "March"; m_name[ 3] = "April"; m_name[ 4] = "May"; m_name[ 5] = "June"; m_name[ 6] = "July"; m_name[ 7] = "August"; m_name[ 8] = "September"; m_name[ 9] = "October"; m_name[10] = "November"; m_name[11] = "December"; vert_center(a, 2, last_r, m_name[m-1]); vert_center(a, max_c-3, last_r, ""+y); for (ir = 0; ir <= last_r; ir += last_r) { for (ic = 0; ic < max_c; ++ic) { if (a[ic][ir] == '|') a[ic][ir] = '+'; if (a[ic][ir] == ' ') a[ic][ir] = '-'; } } // Print final calendar: for (ir = 0; ir <= last_r; ++ir) { for (ic = 0; ic < max_c; ++ic) f.write((int)a[ic][ir]); f.write('\n'); } } static void vert_center(char a[][], int c, int rn, String s) { // Place `s' vertically centered between rows 0 and `rn'. // The text is to be placed in `a' in column `c'. int rx = (rn+1-s.length())/2, sx; for (sx = 0; sx < s.length(); ++sx) a[c][rx++] = s.charAt(sx); } public static void main(String args[]) throws Exception { FileWriter out; StreamTokenizer in; int n, i, year, month, n_days, first_day; in = new StreamTokenizer(new FileReader(new File("calendar.in"))); out = new FileWriter(new File("calendar.out")); in.nextToken(); n = (int)in.nval; for (i = 1; i <= n; ++i) { in.nextToken(); year = (int)in.nval; in.nextToken(); month = (int)in.nval; in.nextToken(); n_days = (int)in.nval; in.nextToken(); first_day = (int)in.nval; make_calendar(out, year, month, n_days, first_day); if (i < n) out.write('\n'); } out.close(); } }