#include int main() { int N = 0; scanf("%d", &N); while (N--) { int maxArr[105][105]; int minArr[105][105]; int front[105]; int right[105]; int count = 0, sumFront = 0, sumRight = 0; scanf("%d", &count); for (int i = 0; i < count; i++) { for (int j = 0; j < count; j++) { minArr[i][j] = maxArr[i][j] = 0; } } for (int i = 0; i < count; i++) { int num = 0; scanf("%d", &num); front[i] = num; sumFront += num; for (int y = 0; y < count; y++) { maxArr[y][i] = num; } } for (int i = 0; i < count; i++) { int num = 0; scanf("%d", &num); right[i] = num; sumRight += num; int pos = count - i - 1; for (int x = 0; x < count; x++) { if (maxArr[pos][x] > num) maxArr[pos][x] = num; } } for (int x = 0; x < count; x++) { int frontNum = front[x]; int bestY = 0; for (int y = 0; y < count; y++) { int rightNum = right[y]; if (frontNum == rightNum) { bestY = y; break; } else if (frontNum < rightNum && right[bestY] > rightNum) bestY = y; } minArr[x][bestY] = frontNum; } for (int y = 0; y < count; y++) { int rightNum = right[y]; int max = 0; for (int x = 0; x < count; x++) max = (minArr[x][y] > max ? minArr[x][y] : max); if (rightNum > max) { int bestX = 0; for (int x = 0; x < count; x++) { int frontNum = front[x]; if (frontNum == rightNum) { bestX = x; break; } else if (frontNum > rightNum && front[bestX] > frontNum) bestX = x; } minArr[bestX][y] = rightNum; } } int min = 0, max = 0; for (int i = 0; i < count; i++) { for (int j = 0; j < count; j++) { min += minArr[i][j]; max += maxArr[i][j]; } } printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", min, max); } return 0; }