// main.c
// Copyright (C) 2023 Mark Bowron

// Produce header file relations_408.h

// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.


#include    <stdio.h>
#include    <stdlib.h>
#include    <inttypes.h>
#include    <stdbool.h>
#include    <string.h>
#include    "set_operators.h"
#include    "set_families.h"
#include    "set_relations.h"
#include    "collapses.h"


int main(int argc, const char * argv[])
{
    int   **eq, **leq;
    int     j, k;
    KFenum  key = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
                    20,21,22,23,24,25,26,27,28,29,30,31,32,33};
    KFenum *kf = &key;

    eq = (int **)malloc(34 * sizeof(int *));
    if (eq==0)
    {
        printf("\nCould not allocate space for eq.\n");
        exit(0);
    }
    leq = (int **)malloc(34 * sizeof(int *));
    if (leq==0)
    {
        printf("\nCould not allocate space for leq.\n");
        exit(0);
    }
    for (j=0; j<34; j++)
    {
        eq[j] = (int *)malloc(34 * sizeof(int));
        if (eq[j]==0)
        {
            printf("\nCould not allocate space for eq[%d].\n", j);
            exit(0);
        }
        leq[j] = (int *)malloc(34 * sizeof(int));
        if (leq[j]==0)
        {
            printf("\nCould not allocate space for leq[%d].\n", j);
            exit(0);
        }
        for (k=0; k<34; k++)
        {
            eq[j][k] = 0;
            leq[j][k] = 0;
        }
    }

// Enter the equivalence classes of all 408 relations in Table 11.

    leq[kf->_fbi][kf->_id] = 1;
    eq[kf->_bib][kf->_b] = 2;
    eq[kf->_fb][kf->_fib] = 2;
    leq[kf->_id][kf->_bib] = 2;
    leq[kf->_f][kf->_bib] = 2;
    leq[kf->_ff][kf->_bib] = 2;
    leq[kf->_fb][kf->_bib] = 2;
    leq[kf->_fif][kf->_a] = 3;
    leq[kf->_fbi][kf->_fib] = 4;
    leq[kf->_fif][kf->_fib] = 4;
    leq[kf->_fbi][kf->_fb] = 4;
    leq[kf->_fif][kf->_fb] = 4;
    leq[kf->_fbi][kf->_aib] = 4;
    leq[kf->_fif][kf->_aib] = 4;
    leq[kf->_fbi][kf->_fif] = 5;
    leq[kf->_fib][kf->_fif] = 5;
    leq[kf->_fbi][kf->_bif] = 5;
    leq[kf->_fib][kf->_bif] = 5;
    leq[kf->_fib][kf->_fbi] = 6;
    leq[kf->_fif][kf->_fbi] = 6;
    leq[kf->_fib][kf->_fi] = 6;
    leq[kf->_fif][kf->_fi] = 6;
    leq[kf->_fib][kf->_bi] = 6;
    leq[kf->_fif][kf->_bi] = 6;
    leq[kf->_fif][kf->_id] = 7;
    eq[kf->_ibi][kf->_i] = 8;
    eq[kf->_fi][kf->_fbi] = 8;
    leq[kf->_ibi][kf->_id] = 8;
    leq[kf->_f][kf->_aibi] = 8;
    leq[kf->_ff][kf->_aibi] = 8;
    leq[kf->_fi][kf->_aibi] = 8;
    leq[kf->_fib][kf->_a] = 9;
    leq[kf->_bi][kf->_ib] = 10;
    leq[kf->_bi][kf->_afb] = 10;
    leq[kf->_fi][kf->_ib] = 10;
    leq[kf->_fbi][kf->_ib] = 10;
    leq[kf->_bi][kf->_afib] = 10;
    leq[kf->_fi][kf->_afib] = 10;
    leq[kf->_fb][kf->_afbi] = 10;
    leq[kf->_fb][kf->_afi] = 10;
    leq[kf->_fbi][kf->_afib] = 10;
    leq[kf->_bi][kf->_abif] = 11;
    leq[kf->_bi][kf->_afif] = 11;
    leq[kf->_fi][kf->_afif] = 11;
    leq[kf->_bif][kf->_afi] = 11;
    leq[kf->_fbi][kf->_afif] = 11;
    leq[kf->_bif][kf->_afbi] = 11;
    eq[kf->_fib][kf->_fif] = 12;
    leq[kf->_fib][kf->_id] = 13;
    eq[kf->_fib][kf->_fbi] = 14;
    leq[kf->_fbi][kf->_a] = 15;
    eq[kf->_fbi][kf->_fif] = 16;
    leq[kf->_bif][kf->_ib] = 17;
    leq[kf->_fif][kf->_ib] = 17;
    leq[kf->_fb][kf->_afif] = 17;
    leq[kf->_bif][kf->_afb] = 17;
    leq[kf->_fib][kf->_afif] = 17;
    leq[kf->_bif][kf->_afib] = 17;
    eq[kf->_bi][kf->_ibi] = 18;
    eq[kf->_fbi][kf->_zero] = 18;
    leq[kf->_fi][kf->_ibi] = 18;
    eq[kf->_ff][kf->_fb] = 19;
    leq[kf->_fi][kf->_fb] = 19;
    leq[kf->_ff][kf->_aib] = 19;
    leq[kf->_fi][kf->_aib] = 19;
    leq[kf->_fi][kf->_fib] = 19;
    leq[kf->_bi][kf->_id] = 20;
    leq[kf->_fi][kf->_id] = 20;
    eq[kf->_bif][kf->_if] = 21;
    eq[kf->_fif][kf->_zero] = 21;
    leq[kf->_bif][kf->_aff] = 21;
    leq[kf->_id][kf->_ib] = 22;
    leq[kf->_fb][kf->_a] = 22;
    eq[kf->_ff][kf->_fi] = 23;
    leq[kf->_fb][kf->_fi] = 23;
    leq[kf->_ff][kf->_bi] = 23;
    leq[kf->_fb][kf->_bi] = 23;
    leq[kf->_fb][kf->_fbi] = 23;
    eq[kf->_bib][kf->_ib] = 24;
    eq[kf->_fib][kf->_zero] = 24;
    leq[kf->_bib][kf->_afb] = 24;
    leq[kf->_fb][kf->_id] = 25;
    eq[kf->_bib][kf->_bi] = 26;
    eq[kf->_ibi][kf->_ib] = 26;
    eq[kf->_bif][kf->_zero] = 26;
    eq[kf->_if][kf->_zero] = 26;
    eq[kf->_bif][kf->_fif] = 26;
    eq[kf->_if][kf->_fif] = 26;
    eq[kf->_f][kf->_ff] = 26;
    leq[kf->_ib][kf->_bi] = 26;
    leq[kf->_if][kf->_id] = 26;
    leq[kf->_id][kf->_aif] = 26;
    leq[kf->_bif][kf->_id] = 26;
    leq[kf->_bif][kf->_a] = 26;
    leq[kf->_bif][kf->_bi] = 26;
    leq[kf->_bif][kf->_aib] = 26;
    leq[kf->_bif][kf->_fb] = 26;
    leq[kf->_bif][kf->_fi] = 26;
    leq[kf->_bif][kf->_fbi] = 26;
    leq[kf->_bif][kf->_fib] = 26;
    leq[kf->_bif][kf->_ff] = 26;
    leq[kf->_fi][kf->_a] = 27;
    eq[kf->_ff][kf->_fib] = 28;
    eq[kf->_ff][kf->_fbi] = 29;
    eq[kf->_fib][kf->_fi] = 30;
    leq[kf->_fb][kf->_bif] = 31;
    leq[kf->_fb][kf->_fif] = 31;
    eq[kf->_bi][kf->_ib] = 32;
    eq[kf->_bib][kf->_ibi] = 32;
    eq[kf->_bif][kf->_fbi] = 32;
    eq[kf->_bif][kf->_fib] = 32;
    eq[kf->_if][kf->_fbi] = 32;
    eq[kf->_if][kf->_fib] = 32;
    leq[kf->_fi][kf->_bif] = 33;
    leq[kf->_fi][kf->_fif] = 33;
    eq[kf->_fb][kf->_fbi] = 34;
    eq[kf->_bi][kf->_i] = 35;
    eq[kf->_fi][kf->_zero] = 35;
    leq[kf->_bi][kf->_af] = 35;
    leq[kf->_bi][kf->_aff] = 35;
    leq[kf->_ff][kf->_a] = 36;
    eq[kf->_fb][kf->_fi] = 37;
    leq[kf->_ff][kf->_id] = 38;
    eq[kf->_ib][kf->_b] = 39;
    eq[kf->_fb][kf->_zero] = 39;
    leq[kf->_f][kf->_ib] = 39;
    leq[kf->_ff][kf->_ib] = 39;
    eq[kf->_fb][kf->_fif] = 40;
    eq[kf->_ib][kf->_i] = 41;
    eq[kf->_f][kf->_fb] = 41;
    leq[kf->_ib][kf->_id] = 41;
    leq[kf->_f][kf->_aib] = 41;
    eq[kf->_bi][kf->_b] = 42;
    eq[kf->_f][kf->_fi] = 42;
    leq[kf->_id][kf->_bi] = 42;
    leq[kf->_f][kf->_bi] = 42;
    eq[kf->_fi][kf->_fif] = 43;
    eq[kf->_f][kf->_fbi] = 44;
    eq[kf->_f][kf->_fib] = 44;
    leq[kf->_bib][kf->_id] = 45;
    eq[kf->_i][kf->_zero] = 46;
    eq[kf->_b][kf->_f] = 46;
    eq[kf->_bi][kf->_zero] = 46;
    eq[kf->_ibi][kf->_zero] = 46;
    eq[kf->_i][kf->_fi] = 46;
    eq[kf->_i][kf->_fbi] = 46;
    eq[kf->_bi][kf->_fi] = 46;
    eq[kf->_bi][kf->_fbi] = 46;
    eq[kf->_ibi][kf->_fi] = 46;
    eq[kf->_ibi][kf->_fbi] = 46;
    eq[kf->_ib][kf->_if] = 46;
    eq[kf->_bib][kf->_bif] = 46;
    leq[kf->_bi][kf->_a] = 46;
    leq[kf->_id][kf->_f] = 46;
    leq[kf->_bi][kf->_f] = 46;
    leq[kf->_ibi][kf->_f] = 46;
    leq[kf->_ib][kf->_f] = 46;
    leq[kf->_bib][kf->_f] = 46;
    leq[kf->_bi][kf->_ff] = 46;
    leq[kf->_ibi][kf->_ff] = 46;
    leq[kf->_bi][kf->_fb] = 46;
    leq[kf->_bi][kf->_fib] = 46;
    leq[kf->_bi][kf->_bif] = 46;
    leq[kf->_ib][kf->_bif] = 46;
    leq[kf->_bi][kf->_fif] = 46;
    leq[kf->_ibi][kf->_fi] = 46;
    leq[kf->_bi][kf->_aib] = 46;
    leq[kf->_ibi][kf->_a] = 46;
    leq[kf->_bib][kf->_aff] = 47;
    eq[kf->_f][kf->_bif] = 48;
    eq[kf->_ff][kf->_fif] = 48;
    leq[kf->_ff][kf->_bif] = 48;
    leq[kf->_ff][kf->_ibi] = 49;
    eq[kf->_b][kf->_one] = 50;
    eq[kf->_i][kf->_af] = 50;
    eq[kf->_ib][kf->_one] = 50;
    eq[kf->_bib][kf->_one] = 50;
    eq[kf->_b][kf->_afb] = 50;
    eq[kf->_b][kf->_afib] = 50;
    eq[kf->_ib][kf->_afb] = 50;
    eq[kf->_ib][kf->_afib] = 50;
    eq[kf->_bib][kf->_afb] = 50;
    eq[kf->_bib][kf->_afib] = 50;
    eq[kf->_bi][kf->_aif] = 50;
    eq[kf->_ibi][kf->_abif] = 50;
    leq[kf->_a][kf->_ib] = 50;
    leq[kf->_a][kf->_f] = 50;
    leq[kf->_aib][kf->_f] = 50;
    leq[kf->_abib][kf->_f] = 50;
    leq[kf->_abi][kf->_f] = 50;
    leq[kf->_aibi][kf->_f] = 50;
    leq[kf->_aib][kf->_ff] = 50;
    leq[kf->_abib][kf->_ff] = 50;
    leq[kf->_aib][kf->_fi] = 50;
    leq[kf->_aib][kf->_fbi] = 50;
    leq[kf->_aib][kf->_bif] = 50;
    leq[kf->_abi][kf->_bif] = 50;
    leq[kf->_aib][kf->_fif] = 50;
    leq[kf->_abib][kf->_fb] = 50;
    leq[kf->_abi][kf->_ib] = 50;
    leq[kf->_a][kf->_bib] = 50;
    leq[kf->_id][kf->_ibi] = 51;
    eq[kf->_bib][kf->_if] = 52;
    eq[kf->_ib][kf->_bif] = 52;
    eq[kf->_i][kf->_fib] = 52;
    eq[kf->_i][kf->_fif] = 52;
    eq[kf->_bi][kf->_fib] = 52;
    eq[kf->_bi][kf->_fif] = 52;
    eq[kf->_ibi][kf->_fib] = 52;
    eq[kf->_ibi][kf->_fif] = 52;
    eq[kf->_id][kf->_b] = 53;
    leq[kf->_f][kf->_id] = 53;
    eq[kf->_bib][kf->_f] = 54;
    eq[kf->_b][kf->_bif] = 54;
    leq[kf->_id][kf->_bif] = 54;
    eq[kf->_bib][kf->_i] = 55;
    eq[kf->_bif][kf->_fi] = 55;
    eq[kf->_if][kf->_fi] = 55;
    leq[kf->_bib][kf->_af] = 55;
    eq[kf->_ibi][kf->_b] = 56;
    eq[kf->_bif][kf->_fb] = 56;
    eq[kf->_if][kf->_fb] = 56;
    leq[kf->_f][kf->_ibi] = 56;
    eq[kf->_ibi][kf->_af] = 57;
    eq[kf->_i][kf->_abif] = 57;
    leq[kf->_a][kf->_bif] = 57;
    eq[kf->_id][kf->_i] = 58;
    leq[kf->_f][kf->_a] = 58;
    eq[kf->_ibi][kf->_aif] = 59; 
    eq[kf->_bi][kf->_abif] = 59;
    eq[kf->_b][kf->_afbi] = 59;
    eq[kf->_b][kf->_afif] = 59;
    eq[kf->_ib][kf->_afbi] = 59;
    eq[kf->_ib][kf->_afif] = 59;
    eq[kf->_bib][kf->_afbi] = 59;
    eq[kf->_bib][kf->_afif] = 59;
    leq[kf->_id][kf->_if] = 60;
    eq[kf->_ib][kf->_zero] = 61;
    eq[kf->_bib][kf->_zero] = 61;
    eq[kf->_b][kf->_fb] = 61;
    eq[kf->_b][kf->_ff] = 61;
    eq[kf->_ib][kf->_fbi] = 61;
    eq[kf->_ib][kf->_fi] = 61;
    eq[kf->_ib][kf->_fib] = 61;
    eq[kf->_ib][kf->_fif] = 61;
    eq[kf->_bib][kf->_fbi] = 61;
    eq[kf->_bib][kf->_fi] = 61;
    eq[kf->_bib][kf->_fib] = 61;
    eq[kf->_bib][kf->_fif] = 61;
    eq[kf->_i][kf->_bif] = 61;
    eq[kf->_i][kf->_if] = 61;
    eq[kf->_bi][kf->_bif] = 61;
    eq[kf->_bi][kf->_if] = 61;
    eq[kf->_ibi][kf->_bif] = 61;
    eq[kf->_ibi][kf->_if] = 61;
    leq[kf->_id][kf->_fb] = 61;
    leq[kf->_id][kf->_ff] = 61;
    leq[kf->_ib][kf->_a] = 61;
    leq[kf->_bib][kf->_a] = 61;
    leq[kf->_bib][kf->_fb] = 61;
    leq[kf->_bib][kf->_ff] = 61;
    leq[kf->_ib][kf->_fi] = 61;
    leq[kf->_ib][kf->_ff] = 61;
    leq[kf->_ib][kf->_fbi] = 61;
    leq[kf->_ib][kf->_fif] = 61;
    eq[kf->_id][kf->_bi] = 62;
    eq[kf->_id][kf->_bib] = 62;
    eq[kf->_f][kf->_if] = 63;
    eq[kf->_ff][kf->_zero] = 63;
    eq[kf->_id][kf->_ib] = 64;
    eq[kf->_id][kf->_ibi] = 64;
    eq[kf->_bi][kf->_one] = 65;
    eq[kf->_ibi][kf->_one] = 65;
    eq[kf->_i][kf->_afi] = 65;
    eq[kf->_i][kf->_aff] = 65;
    eq[kf->_bi][kf->_afib] = 65;
    eq[kf->_bi][kf->_afb] = 65;
    eq[kf->_bi][kf->_afbi] = 65;
    eq[kf->_bi][kf->_afif] = 65;
    eq[kf->_ibi][kf->_afib] = 65;
    eq[kf->_ibi][kf->_afb] = 65;
    eq[kf->_ibi][kf->_afif] = 65;
    eq[kf->_ibi][kf->_afbi] = 65;
    eq[kf->_b][kf->_abif] = 65;
    eq[kf->_b][kf->_aif] = 65;
    eq[kf->_ib][kf->_abif] = 65;
    eq[kf->_bib][kf->_aif] = 65;
    eq[kf->_bib][kf->_abif] = 65;
    eq[kf->_ib][kf->_aif] = 65;
    leq[kf->_a][kf->_fi] = 65;
    leq[kf->_a][kf->_ff] = 65;
    leq[kf->_a][kf->_bi] = 65;
    leq[kf->_a][kf->_ibi] = 65;
    leq[kf->_aibi][kf->_fi] = 65;
    leq[kf->_aibi][kf->_ff] = 65;
    leq[kf->_abi][kf->_fb] = 65;
    leq[kf->_abi][kf->_ff] = 65;
    leq[kf->_abi][kf->_fib] = 65;
    leq[kf->_abi][kf->_fif] = 65;
    leq[kf->_a][kf->_if] = 66;
    eq[kf->_id][kf->_f] = 67;
    eq[kf->_id][kf->_fb] = 67;
    eq[kf->_id][kf->_ff] = 67;
    eq[kf->_b][kf->_if] = 68;
    eq[kf->_ib][kf->_f] = 68;
    eq[kf->_i][kf->_fb] = 68;
    eq[kf->_i][kf->_ff] = 68;
    eq[kf->_bi][kf->_fb] = 68;
    eq[kf->_bi][kf->_ff] = 68;
    eq[kf->_ibi][kf->_fb] = 68;
    eq[kf->_ibi][kf->_ff] = 68;
    eq[kf->_b][kf->_i] = 69;
    eq[kf->_f][kf->_zero] = 69;
    eq[kf->_f][kf->_fif] = 69;
    eq[kf->_ff][kf->_bif] = 69;
    eq[kf->_ff][kf->_if] = 69;
    eq[kf->_i][kf->_aif] = 70;
    eq[kf->_bi][kf->_af] = 70;
    eq[kf->_b][kf->_afi] = 70;
    eq[kf->_b][kf->_aff] = 70;
    eq[kf->_ib][kf->_afi] = 70;
    eq[kf->_ib][kf->_aff] = 70;
    eq[kf->_bib][kf->_afi] = 70;
    eq[kf->_bib][kf->_aff] = 70;
    eq[kf->_id][kf->_af] = 71;
    eq[kf->_id][kf->_afi] = 71;
    eq[kf->_id][kf->_aff] = 71;
    eq[kf->_id][kf->_zero] = 72;
    eq[kf->_b][kf->_zero] = 72;
    eq[kf->_i][kf->_f] = 72;
    eq[kf->_id][kf->_fbi] = 72;
    eq[kf->_id][kf->_fi] = 72;
    eq[kf->_id][kf->_fib] = 72;
    eq[kf->_id][kf->_fif] = 72;
    eq[kf->_id][kf->_bif] = 72;
    eq[kf->_id][kf->_if] = 72;
    eq[kf->_b][kf->_fbi] = 72;
    eq[kf->_b][kf->_fi] = 72;
    eq[kf->_b][kf->_fib] = 72;
    eq[kf->_b][kf->_fif] = 72;
    eq[kf->_ib][kf->_fb] = 72;
    eq[kf->_ib][kf->_ff] = 72;
    eq[kf->_bib][kf->_fb] = 72;
    eq[kf->_bib][kf->_ff] = 72;
    eq[kf->_bi][kf->_f] = 72;
    eq[kf->_ibi][kf->_f] = 72;
    leq[kf->_id][kf->_fbi] = 72;
    leq[kf->_id][kf->_fi] = 72;
    leq[kf->_id][kf->_fib] = 72;
    leq[kf->_id][kf->_fif] = 72;
    eq[kf->_f][kf->_one] = 73;
    eq[kf->_if][kf->_one] = 73;
    eq[kf->_bif][kf->_one] = 73;
    eq[kf->_b][kf->_ai] = 73;
    eq[kf->_b][kf->_abi] = 73;
    eq[kf->_b][kf->_aibi] = 73;
    eq[kf->_bi][kf->_abib] = 73;
    eq[kf->_bi][kf->_aib] = 73;
    eq[kf->_bib][kf->_aibi] = 73;
    eq[kf->_i][kf->_aib] = 73;
    eq[kf->_i][kf->_abib] = 73;
    eq[kf->_ib][kf->_aibi] = 73;
    eq[kf->_f][kf->_afb] = 73;
    eq[kf->_f][kf->_aff] = 73;
    eq[kf->_f][kf->_afbi] = 73;
    eq[kf->_f][kf->_afi] = 73;
    eq[kf->_f][kf->_afib] = 73;
    eq[kf->_f][kf->_afif] = 73;
    eq[kf->_ff][kf->_abif] = 73;
    eq[kf->_ff][kf->_aif] = 73;
    eq[kf->_bif][kf->_afbi] = 73;
    eq[kf->_bif][kf->_afi] = 73;
    eq[kf->_bif][kf->_afb] = 73;
    eq[kf->_bif][kf->_afib] = 73;
    eq[kf->_bif][kf->_afif] = 73;
    eq[kf->_if][kf->_afb] = 73;
    eq[kf->_if][kf->_afbi] = 73;
    eq[kf->_if][kf->_afi] = 73;
    eq[kf->_if][kf->_afib] = 73;
    eq[kf->_if][kf->_afif] = 73;
    leq[kf->_abif][kf->_fb] = 73;
    leq[kf->_abif][kf->_fi] = 73;
    leq[kf->_abif][kf->_fbi] = 73;
    leq[kf->_abif][kf->_fib] = 73;
    leq[kf->_aff][kf->_bif] = 73;
    eq[kf->_id][kf->_one] = 74;
    eq[kf->_i][kf->_one] = 74;
    eq[kf->_id][kf->_afib] = 74;
    eq[kf->_id][kf->_afb] = 74;
    eq[kf->_id][kf->_afbi] = 74;
    eq[kf->_id][kf->_afif] = 74;
    eq[kf->_id][kf->_abif] = 74;
    eq[kf->_id][kf->_aif] = 74;
    eq[kf->_i][kf->_afib] = 74;
    eq[kf->_i][kf->_afb] = 74;
    eq[kf->_i][kf->_afbi] = 74;
    eq[kf->_i][kf->_afif] = 74;
    eq[kf->_bi][kf->_afi] = 74;
    eq[kf->_bi][kf->_aff] = 74;
    eq[kf->_ibi][kf->_afi] = 74;
    eq[kf->_ibi][kf->_aff] = 74;
    eq[kf->_b][kf->_af] = 74;
    eq[kf->_ib][kf->_af] = 74;
    eq[kf->_bib][kf->_af] = 74;
    leq[kf->_a][kf->_fib] = 74;
    leq[kf->_a][kf->_fb] = 74;
    leq[kf->_a][kf->_fbi] = 74;
    leq[kf->_a][kf->_fif] = 74;

// eq[][] needs to be symmetrized.

    for (j=0; j<34; j++)
        for (k=0; k<34; k++)
            if (eq[j][k]) eq[k][j] = eq[j][k];

// Print relations_408.h

    printf("// relations_408.h\n");
    printf("// Copyright (C) 2023 Mark Bowron\n\n");
    printf("// Equivalence classes of the 408 representative relations in KF(A).\n\n");
    printf("// This program is free software: you can redistribute it and/or modify\n");
    printf("// it under the terms of the GNU General Public License as published by\n");
    printf("// the Free Software Foundation, either version 3 of the License, or\n");
    printf("// (at your option) any later version.\n\n");
    printf("// This program is distributed in the hope that it will be useful,\n");
    printf("// but WITHOUT ANY WARRANTY; without even the implied warranty of\n");
    printf("// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n");
    printf("// GNU General Public License for more details.\n\n");
    printf("static const int inequality_classes[34][34] = {\n");

    for (j=0; j<33; j++)
    {
        printf("{");
        for (k=0; k<33; k++) printf("%d,", leq[j][k]);
        printf("%d},\n", leq[j][33]);
    }
    printf("{");
    for (k=0; k<33; k++) printf("%d,", leq[33][k]);
    printf("%d}};\n\nstatic const int equation_classes[34][34] = {\n", leq[33][33]);

    for (j=0; j<33; j++)
    {
        printf("{");
        for (k=0; k<33; k++) printf("%d,", eq[j][k]);
        printf("%d},\n", eq[j][33]);
    }
    printf("{");
    for (k=0; k<33; k++) printf("%d,", eq[33][k]);
    printf("%d}};\n\n", eq[33][33]);

    for (j=0; j<34; j++)
    {
        free(eq[j]);
        free(leq[j]);
    }
    free(eq);
    free(leq);
    return EXIT_SUCCESS;
}
