int main() {
    int n;

    // Read n (number of batch records)
    if (scanf("%d", &n) != 1) {
        printf("Invalid input\n");
        return 1;
    }

    // Constraints check
    if (n < 1 || n > 100) {
        printf("Invalid input\n");
        return 1;
    }

    int *batchResults = (int *)malloc(n * sizeof(int));
    if (batchResults == NULL) {
        printf("Memory allocation failed\n");
        return 1;
    }

    int smallest = INT_MAX;
    int largest = INT_MIN;

    // Read n integers and find smallest/largest
    for (int i = 0; i < n; i++) {
        if (scanf("%d", &batchResults[i]) != 1) {
            printf("Invalid input\n");
            free(batchResults);
            return 1;
        }
        if (batchResults[i] < smallest) {
            smallest = batchResults[i];
        }
        if (batchResults[i] > largest) {
            largest = batchResults[i];
        }
    }

    // Sort the batch results
    bubbleSort(batchResults, n);

    // Output sorted batch results
    for (int i = 0; i < n; i++) {
        printf("%d", batchResults[i]);
        if (i < n - 1) {
            printf(" ");
        }
    }
    printf("\n");

    // Output smallest and largest
    printf("Smallest: %d\n", smallest);
    printf("Largest: %d\n", largest);

    free(batchResults); // Free allocated memory
    return 0;
}