#include <stdio.h>
#include <omp.h>

char mt[769];

int main(void)
{
    omp_set_num_threads(64);

#pragma omp parallel
    {
        int n, ofst;

        n = omp_get_thread_num();
        ofst = n/32*384 + n/8%4*12 + n%8*48;
        snprintf(mt+ofst, 12, "%d x %d = %2d",
            n/8+2, n%8+2, (n/8+2)*(n%8+2));
        mt[ofst+10] = n==31?'\n':' ';
        mt[ofst+11] = n/8%4==3?'\n':' ';
    }

    mt[768] = '\0';
    printf("%s\n", mt);

    return 0;
}