### Magic Squares (due 12 November 2012)

A magic square is a 2-D list where the sum of each row is equal to the sum of each column and is equal to the sum of each of the two diagonals. Here is an example of a 3 x 3 magic square:

```  4  9  2
3  5  7
8  1  6
```
Note that the sum of each of the rows, columns, and diagonals is 15. This square is not unique. If you flip the rows for the columns (transpose the square) you will get a magic square. If you add a constant value to each element you will get a magic square, and so on. If you have a magic square of side n, then the sum of the rows or the columns or the diagonals is n (n2 + 1) / 2, if the numbers in the magic square are in the range 1, ..., n2.

Input: The input for this program will be in a file. The first line of the program will be a number n denoting the number of squares that you will have to process. It will be followed by the data for each of the n squares. There will be a blank line separating data for each square. For any given square the first line will give the number of rows (or the columns) followed by the rows of the square - one row per line. Here is an example.

```2

3
4  1  2
3  5  7
8  9  6

4
16   3   2  13
5  10  11   8
9   6   7  12
4  15  14   1
```
The file name will be of your own choosing. But you can use this sample file squares.txt to test your code.

Output: The output will be in a file. The name that you choose for your output file should be different from the name of the input file. The format of the output file should be similar to the input file. You will write valid or invalid next to the size of each square. For the above input file, the output file should look like this:

```2

3 invalid
4  1  2
3  5  7
8  9  6

4 valid
16   3   2  13
5  10  11   8
9   6   7  12
4  15  14   1
```

In your function main() you will prompt the user to enter the name of the input file and the name of the output file. You will compare the two names to make sure that they are not the same. If the names are the same you will write a message to that effect and quit the program. If the names are different you will open the input file for reading and the output file for writing and process the data. When the program has completed processing all the squares you will write a message to the console that the output has been to written to output file. A sample session would look like this:

```  Enter name of input file: squares.txt
Enter name of output file: result.txt

The output has been written to result.txt
```

For this program, you will write a function isMagic() that will determine if a 2-D list forms a magic square. The function should be general enough to accept magic squares of any size greater than or equal to 3. The function signature should look like this:

def isMagic (b):

The file that you will be turning in will be called MagicSquare.py. We will be looking at documentation, descriptive variable and function names, clean logical structure, and adherence to the coding conventions discussed in class. The file will have a header of the following form:

```#  File: MagicSquare.py

#  Description:

#  Student Name:

#  Student UT EID:

#  Course Name: CS 303E

#  Unique Number:

#  Date Created: