int main(void)
{
    mpz_t n, d, e, pt, ct;

    mpz_init(pt);
    mpz_init(ct);
    mpz_init_set_str(n, , 10);
    mpz_init_set_str(e, , 10);
    mpz_init_set_str(d, , 10);

    const char *plaintext = ;
    mpz_import(pt, strlen(plaintext), 1, 1, 0, 0, plaintext);

    if (mpz_cmp(pt, n) > 0)
        abort();

    mpz_powm(ct, pt, e, n);
    gmp_printf(, ct);

    mpz_powm(pt, ct, d, n);
    gmp_printf(, pt);

    char buffer[64];
    mpz_export(buffer, NULL, 1, 1, 0, 0, pt);
    printf(, buffer);

    mpz_clears(pt, ct, n, e, d, NULL);
    return 0;
}