//Blagoja Mladenov #include #include #include int main() { char *c; int i; int j; c = (char*) malloc(3 * sizeof(char)); int **mat; mat = (int **)malloc(2000 * sizeof(int *)); for(i = 0; i < 2000; i++) { *(mat + i) = (int*) malloc(2000 * sizeof(int)); } int *sz = (int*)malloc(2000 * sizeof(int)); for(i = 0; i < 2000; i++) { *(sz + i) = 0; } int r = 0; while(1) { scanf("%s", c); if(strcmp(c, "END") == 0) { break; } if(strcmp(c, "AFR") == 0) { int n; scanf("%d", &n); int *tmp = (int*) malloc(n * sizeof(int)); for(i = 0; i < n; i++) { scanf("%d", (tmp + i)); } int **new = (int**)malloc((r + 1) * sizeof(int*)); for(i = 0; i < r; i++) { *(new + i + 1) = (int*)malloc((*(sz + i)) * sizeof(int)); for(j = 0; j < *(sz + i); j++) { *(*(new + i + 1) + j) = *(*(mat + i) + j); } } *(new) = (int*)malloc(n * sizeof(int)); for(i = 0; i < n; i++) { *(*(new + 0) + i) = *(tmp + i); } for(i = r; i >= 0; i--) { *(sz + i) = *(sz + i - 1); } *sz = n; r++; for(i = 0; i < r; i++) { for(j = 0; j < *(sz + i); j++) { *(*(mat + i) + j) = *(*(new + i) + j); } } free(tmp); for(i = 0; i < r; i++) { free(*(new + i)); } free(new); } else if(strcmp(c, "ALR") == 0) { int n; scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d", (*(mat + r) + i)); } *(sz + r) = n; r++; } else if(strcmp(c, "DFR") == 0) { if(r > 0) { for(i = 0; i < r - 1; i++) { *(sz + i) = *(sz + i + 1); for(j = 0; j < *(sz + i); j++) { *(*(mat + i) + j) = *(*(mat + i + 1) + j); } } r--; *(sz + r) = 0; } } else if(strcmp(c, "DLR") == 0) { if(r > 0) { r--; *(sz + r) = 0; } } else if(strcmp(c, "PRT") == 0) { printf("%d\n", r); for(i = 0; i < r; i++) { printf("%d ", *(sz + i)); for(j = 0; j < *(sz + i); j++) { printf("%d ", *(*(mat + i) + j)); } printf("\n"); } } } free(c); free(sz); for(i = 0; i < r; i++) { free(*(mat + i)); } free(mat); return 0; }