rendered paste body#include <stdio.h>
#define TRUE 1
#define FALSE 0
int numSides=0;
char **original, **new, **temp, **temp2;
void rotate(char **temp, int numSides);
int compare(char **original, char **temp, int numSides);
void reflect(char **original, char **temp, int numSides);
main() {
FILE *fin = fopen("transform.in", "r");
FILE *fout = fopen("transform.out", "w");
int n, m;
fscanf(fin, "%d", &numSides);
original = (char**)calloc(numSides,sizeof(char**));
for(n=0; n<numSides; n++) { original[n] = (char*)calloc(numSides,sizeof(char**)); }
new = (char**)calloc(numSides,sizeof(char**));
for(n=0; n<numSides; n++) { new[n] = (char*)calloc(numSides,sizeof(char**)); }
temp = (char**)calloc(numSides,sizeof(char**));
for(n=0; n<numSides; n++) { temp[n] = (char*)calloc(numSides,sizeof(char**)); }
for (n = 0; n < numSides; n++)
for (m = 0; m < numSides; m++) {
fscanf(fin, "%c", &original[n][m]);
if (original[n][m] == '\n') fscanf(fin, "%c", &original[n][m]);
temp[n][m] = original[n][m];
}//end inner for
for (n = 0; n < numSides; n++)
for (m = 0; m < numSides; m++) {
fscanf(fin, "%c", &new[n][m]);
if (new[n][m] == '\n') fscanf(fin, "%c", &new[n][m]);
}//end inner for
if ( compare(original, new, numSides) ) { fprintf(fout, "6\n"); exit(0); }
if ( original[0][0] == new[0][numSides-1] ) {
rotate(temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "1\n"); exit(0); }
}//end if
if ( original[0][0] == new[numSides-1][numSides-1] ) {
rotate(temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "2\n"); exit(0); }
}//end if
if ( original[0][0] == new[numSides-1][0] ) {
rotate(temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "3\n"); exit(0); }
}//end if
if ( original[0][0] == new[numSides-1][0] ) {
reflect(original, temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "4\n"); exit(0); }
}//end if
rotate(temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "5\n"); exit(0); }
rotate(temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "5\n"); exit(0); }
rotate(temp, numSides);
if ( compare(new, temp, numSides) ) { fprintf(fout, "5\n"); exit(0); }
fprintf(fout, "7\n");
exit(0);
}//end main
void rotate(char **temp, int numSides) {
int n, m;
numSides -= 1;
temp2 = (char**)calloc(numSides+1,sizeof(char**));
for(n=0; n<numSides+1; n++) { temp2[n] = (char*)calloc(numSides+1,sizeof(char**)); }
for (n = 0; n < numSides + 1; n++)
for (m = 0; m < numSides + 1; m++)
temp2[m][numSides - n] = temp[n][m];
for (n = 0; n < numSides + 1; n++)
for (m = 0; m < numSides + 1; m++)
temp[n][m] = temp2[n][m];
}//end rotate function
int compare(char **new, char **temp, int numSides) {
int n, m;
for (n = 0; n < numSides; n++)
for (m = 0; m < numSides; m++)
if (new[n][m] != temp[n][m]) return FALSE;
return TRUE;
}//end compare method
void reflect(char **original, char **temp, int numSides) {
int n, m;
for (n = 0; n < numSides; n++)
for (m = 0; m < numSides; m++)
temp[n][m] = original[numSides - 1 - n][m];
}//end reflect method