/* makewhat.f -- translated by f2c (version 19950110).
   You must link the resulting object file with the libraries:
	-lf2c -lm   (in that order)
*/

#include "f2c.h"

/* Table of constant values */

static integer c__9 = 9;
static integer c__1 = 1;
static integer c__3 = 3;
static integer c__22 = 22;
static integer c__5 = 5;
static integer c__4096 = 4096;
static integer c__27 = 27;
static integer c__23 = 23;
static integer c__16 = 16;
static integer c__15 = 15;
static integer c__17 = 17;
static doublereal c_b389 = 4294967291.;
static doublereal c_b392 = 34359737519.;
static doublereal c_b393 = 34359736739.;
static integer c__20 = 20;
static integer c__13 = 13;
static doublereal c_b546 = 2.;
static integer c__54 = 54;
static integer c__12 = 12;
static integer c__18 = 18;
static doublereal c_b842 = 4294967296.;

/* ****Makewhat.f: program to make random number files for DIEHARD */
/* Main program */ MAIN__()
{
    /* Format strings */
    static char fmt_123[] = "(\002 This program makes a file of random integ\
ers \002,/,\002 for tests by DIEHARD.  Select one from this list:\002,/)";
    static char fmt_124[] = "(\002  1.  A multiply-with-carry (MWC) generato\
r x(n)=a*x(n-1)+carry  mod 2^32\002,/,\002  2.  A MWC generator on pairs of \
16 bits\002,/,\002  3.  The \"Mother of all random number generators\"\002,/,\
\002  4.  The KISS  generator\002,/,\002  5.  The simple but very good gener\
ator COMBO\002,/,\002  6.  The lagged Fibonacci-MWC combination ULTRA\002,/\
,\002  7.  A combination MWC/subtract-with-borrow (SWB) generator, period ~ \
10^364\002,/,\002  8.  An extended congruential generator\002,/,\002  9.  Th\
e Super-Duper generator\002,/,\002 10.  A subtract-with-borrow generator\002\
,/,\002 11.  Any specified congruential generator\002,/,\002 12.  The 31-bit\
 generator ran2 from Numerical Recipes\002,/,\002 13.  Any specified shift-r\
egister generator, 31 or 32 bits\002,/,\002 14.  The system generator in Sun\
 Fortran f77\002,/,\002 15.  Any lagged-Fibonacci generator,  x(n)=x(n-r) op\
 x(n-s)\002,/,\002 16.  An inverse congruential generator\002,/)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer s_wsfe(), e_wsfe(), f_open(), s_wsle(), do_lio(), e_wsle(), 
	    s_rsle(), e_rsle();

    /* Local variables */
    extern /* Subroutine */ int makefibo_(), makecmbo_(), makesbmc_(), 
	    makecong_(), makexcng_(), makeinvc_(), makeltra_(), makeshrg_(), 
	    makekiss_(), makemthr_(), makesunr_(), makesupr_(), make1616_();
    static integer jch;
    extern /* Subroutine */ int makeswb_(), makeran2_(), makemwc1_();

    /* Fortran I/O blocks */
    static cilist io___1 = { 0, 6, 0, fmt_123, 0 };
    static cilist io___2 = { 0, 6, 0, fmt_124, 0 };
    static cilist io___3 = { 0, 6, 0, 0, 0 };
    static cilist io___4 = { 0, 5, 0, 0, 0 };


    s_wsfe(&io___1);
    e_wsfe();
    s_wsfe(&io___2);
    e_wsfe();
    o__1.oerr = 0;
    o__1.ounit = 4;
    o__1.ofnmlen = 9;
    o__1.ofnm = "makef.txt";
    o__1.orl = 0;
    o__1.osta = 0;
    o__1.oacc = 0;
    o__1.ofm = 0;
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___3);
    do_lio(&c__9, &c__1, "  Enter your choice, 1 to 16:", 29L);
    e_wsle();
    s_rsle(&io___4);
    do_lio(&c__3, &c__1, (char *)&jch, (ftnlen)sizeof(integer));
    e_rsle();
    if (jch == 1) {
	makemwc1_();
    }
    if (jch == 2) {
	make1616_();
    }
    if (jch == 3) {
	makemthr_();
    }
    if (jch == 4) {
	makekiss_();
    }
    if (jch == 5) {
	makecmbo_();
    }
    if (jch == 6) {
	makeltra_();
    }
    if (jch == 7) {
	makesbmc_();
    }
    if (jch == 8) {
	makexcng_();
    }
    if (jch == 9) {
	makesupr_();
    }
    if (jch == 10) {
	makeswb_();
    }
    if (jch == 11) {
	makecong_();
    }
    if (jch == 12) {
	makeran2_();
    }
    if (jch == 13) {
	makeshrg_();
    }
    if (jch == 14) {
	makesunr_();
    }
    if (jch == 15) {
	makefibo_();
    }
    if (jch == 16) {
	makeinvc_();
    }
} /* MAIN__ */

/* Subroutine */ int makemwc1_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_679[] = "(a1)";
    static char fmt_2991[] = "(a15)";
    static char fmt_281[] = "(\002 (In general, for any choice of `a`, let m\
=a*2^32-1. If both m\002,/,\002 and (m-1)/2 are prime then the period will b\
e (m-1)/2).\002)";
    static char fmt_602[] = "(\002  2,867,200 32-bit random integers (11,468\
,800 bytes)\002,/,\002  have been written to the file \002,a15)";

    /* System generated locals */
    integer i__1;
    doublereal d__1;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_wsle(), 
	    do_lio(), e_wsle(), f_open(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char filename[15];
    extern /* Subroutine */ int prod_();
    static char text[80*22];
    static integer a[2], c[4], i, j, n[4096], w[4], x[2], z[4];
    static doublereal aa;
    static integer cc, jk;
    static char op[1];
    static integer xx;
    extern /* Subroutine */ int sum_();

    /* Fortran I/O blocks */
    static cilist io___6 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___8 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___9 = { 0, 6, 0, 0, 0 };
    static cilist io___10 = { 0, 5, 0, fmt_679, 0 };
    static cilist io___12 = { 0, 6, 0, 0, 0 };
    static cilist io___13 = { 0, 5, 0, fmt_2991, 0 };
    static cilist io___15 = { 0, 6, 0, 0, 0 };
    static cilist io___16 = { 0, 6, 0, 0, 0 };
    static cilist io___17 = { 0, 6, 0, 0, 0 };
    static cilist io___18 = { 0, 6, 0, 0, 0 };
    static cilist io___19 = { 0, 6, 0, 0, 0 };
    static cilist io___20 = { 0, 6, 0, 0, 0 };
    static cilist io___21 = { 0, 6, 0, 0, 0 };
    static cilist io___22 = { 0, 6, 0, fmt_281, 0 };
    static cilist io___23 = { 0, 6, 0, 0, 0 };
    static cilist io___24 = { 0, 5, 0, 0, 0 };
    static cilist io___26 = { 0, 6, 0, 0, 0 };
    static cilist io___27 = { 0, 5, 0, 0, 0 };
    static cilist io___30 = { 0, 6, 0, 0, 0 };
    static cilist io___40 = { 0, 2, 0, 0, 0 };
    static cilist io___41 = { 0, 6, 0, 0, 0 };
    static cilist io___42 = { 0, 6, 0, fmt_602, 0 };
    static cilist io___43 = { 0, 6, 0, 0, 0 };


    s_rsfe(&io___6);
    do_fio(&c__22, text, 80L);
    e_rsfe();
    s_wsfe(&io___8);
    do_fio(&c__22, text, 80L);
    e_wsfe();
    s_wsle(&io___9);
    do_lio(&c__9, &c__1, "  Pause:  enter any letter or number key to contin\
ue:", 53L);
    e_wsle();
/* L679: */
    s_rsfe(&io___10);
    do_fio(&c__1, op, 1L);
    e_rsfe();
    s_wsle(&io___12);
    do_lio(&c__9, &c__1, "  Enter filename (<=15 characters) for output:", 
	    46L);
    e_wsle();
    s_rsfe(&io___13);
    do_fio(&c__1, filename, 15L);
    e_rsfe();
    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 15;
    o__1.ofnm = filename;
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___15);
    do_lio(&c__9, &c__1, "      Select multiplier `a` from this list:", 43L);
    e_wsle();
    s_wsle(&io___16);
    do_lio(&c__9, &c__1, "--------------------------------------------------\
-----", 55L);
    e_wsle();
    s_wsle(&io___17);
    do_lio(&c__9, &c__1, " 1791398085 1929682203 1683268614 1965537969 16753\
93560", 55L);
    e_wsle();
    s_wsle(&io___18);
    do_lio(&c__9, &c__1, " 1967773755 1517746329 1447497129 1655692410 16062\
18150", 55L);
    e_wsle();
    s_wsle(&io___19);
    do_lio(&c__9, &c__1, " 2051013963 1075433238 1557985959 1781943330 18935\
13180", 55L);
    e_wsle();
    s_wsle(&io___20);
    do_lio(&c__9, &c__1, " 1631296680 2131995753 2083801278 1873196400 15541\
15554", 55L);
    e_wsle();
    s_wsle(&io___21);
    do_lio(&c__9, &c__1, "--------------------------------------------------\
-----", 55L);
    e_wsle();
    s_wsfe(&io___22);
    e_wsfe();
    s_wsle(&io___23);
    do_lio(&c__9, &c__1, "   Enter multiplier a:", 22L);
    e_wsle();
    s_rsle(&io___24);
    do_lio(&c__5, &c__1, (char *)&aa, (ftnlen)sizeof(doublereal));
    e_rsle();
    s_wsle(&io___26);
    do_lio(&c__9, &c__1, "  Enter a seed integer x and initial carry c:", 45L)
	    ;
    e_wsle();
    s_rsle(&io___27);
    do_lio(&c__3, &c__1, (char *)&xx, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&cc, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___30);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
    x[0] = xx & 65535;
    x[1] = xx >> 16;
    c[0] = cc & 65535;
    c[1] = cc >> 16;
    c[2] = 0;
    c[3] = 0;
    i__1 = (integer) aa;
    a[0] = i__1 & 65535;
    i__1 = (integer) aa;
    a[1] = i__1 >> 16;
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    prod_(x, a, z);
	    sum_(z, c, w);
	    x[0] = w[0];
	    x[1] = w[1];
	    c[0] = w[2];
	    c[1] = w[3];
	    n[j - 1] = (x[1] << 16) + x[0];
/* L3: */
	}
/* L2: */
	io___40.cirec = jk;
	s_wdue(&io___40);
	do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___41);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsfe(&io___42);
    do_fio(&c__1, filename, 15L);
    e_wsfe();
    s_wsle(&io___43);
    do_lio(&c__9, &c__1, "  The period is", 15L);
    d__1 = aa * 2147483648. - 1.;
    do_lio(&c__5, &c__1, (char *)&d__1, (ftnlen)sizeof(doublereal));
    e_wsle();
} /* makemwc1_ */

/* Subroutine */ int make1616_()
{
    /* Format strings */
    static char fmt_846[] = "(a78)";
    static char fmt_800[] = "(f40.0)";
    static char fmt_801[] = "(\002  The correct last 4 digits are\002,i8)";

    /* System generated locals */
    integer i__1;
    doublereal d__1;
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe();
    /* Subroutine */ int s_paus();
    integer s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char text[80*27];
    static integer a, b, i, j, n[4096], x, y, jk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___44 = { 0, 4, 0, fmt_846, 0 };
    static cilist io___47 = { 0, 4, 0, fmt_846, 0 };
    static cilist io___49 = { 0, 6, 0, fmt_846, 0 };
    static cilist io___50 = { 0, 6, 0, fmt_846, 0 };
    static cilist io___51 = { 0, 6, 0, 0, 0 };
    static cilist io___52 = { 0, 4, 0, fmt_846, 0 };
    static cilist io___53 = { 0, 6, 0, fmt_846, 0 };
    static cilist io___54 = { 0, 6, 0, 0, 0 };
    static cilist io___55 = { 0, 5, 0, 0, 0 };
    static cilist io___58 = { 0, 6, 0, 0, 0 };
    static cilist io___59 = { 0, 5, 0, 0, 0 };
    static cilist io___62 = { 0, 6, 0, 0, 0 };
    static cilist io___66 = { 0, 2, 0, 0, 0 };
    static cilist io___67 = { 0, 6, 0, 0, 0 };
    static cilist io___68 = { 0, 6, 0, 0, 0 };
    static cilist io___69 = { 0, 6, 0, 0, 0 };
    static cilist io___70 = { 0, 6, 0, 0, 0 };
    static cilist io___71 = { 0, 6, 0, 0, 0 };
    static cilist io___72 = { 0, 6, 0, fmt_800, 0 };
    static cilist io___73 = { 0, 6, 0, 0, 0 };
    static cilist io___74 = { 0, 6, 0, fmt_801, 0 };


    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 10;
    o__1.ofnm = "mwc1616.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___44);
    for (j = 1; j <= 22; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___47);
    do_fio(&c__27, text, 80L);
    e_rsfe();
    s_wsfe(&io___49);
    for (j = 1; j <= 21; ++j) {
	do_fio(&c__1, text + (j - 1) * 80, 80L);
    }
    e_wsfe();
    s_paus("", 0L);
    s_wsfe(&io___50);
    for (j = 22; j <= 27; ++j) {
	do_fio(&c__1, text + (j - 1) * 80, 80L);
    }
    e_wsfe();
    s_wsle(&io___51);
    do_lio(&c__9, &c__1, "      Select multipliers a and b, a<>b, from this \
list:", 55L);
    e_wsle();
    s_rsfe(&io___52);
    for (j = 1; j <= 10; ++j) {
	do_fio(&c__1, text + (j - 1) * 80, 80L);
    }
    e_rsfe();
    s_wsfe(&io___53);
    for (j = 1; j <= 10; ++j) {
	do_fio(&c__1, text + (j - 1) * 80, 80L);
    }
    e_wsfe();
    s_wsle(&io___54);
    do_lio(&c__9, &c__1, "      Enter a and b: (my favorites are 18000 and 3\
0903)", 55L);
    e_wsle();
    s_rsle(&io___55);
    do_lio(&c__3, &c__1, (char *)&a, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&b, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___58);
    do_lio(&c__9, &c__1, " Enter two (<=31 bit) seed integers, not zero", 45L)
	    ;
    e_wsle();
    s_rsle(&io___59);
    do_lio(&c__3, &c__1, (char *)&x, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&y, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___62);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    x = a * (x & 65535) + (x >> 16);
	    y = b * (y & 65535) + (y >> 16);
/* L3: */
	    n[j - 1] = (x << 16) + (y & 65535);
	}
/* L2: */
	io___66.cirec = jk;
	s_wdue(&io___66);
	do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___67);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsle(&io___68);
    do_lio(&c__9, &c__1, "  2,867,200 32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___69);
    do_lio(&c__9, &c__1, "  have been written to the file mwc1616.32        \
  ", 52L);
    e_wsle();
    s_wsle(&io___70);
    do_lio(&c__9, &c__1, "  They are the concatenated output of two 16-bit", 
	    48L);
    e_wsle();
    s_wsle(&io___71);
    do_lio(&c__9, &c__1, "  multiply-with-carry generators.  The period is", 
	    48L);
    e_wsle();
    s_wsfe(&io___72);
    d__1 = (a * 32768. - 1.) * (b * 32768. - 1.);
    do_fio(&c__1, (char *)&d__1, (ftnlen)sizeof(doublereal));
    e_wsfe();
    s_wsle(&io___73);
    do_lio(&c__9, &c__1, "  (the last 4 digits may be lost to roundoff).", 
	    46L);
    e_wsle();
/* L801: */
    s_wsfe(&io___74);
    i__1 = ((a << 15) - 1) % 10000 * (((b << 15) - 1) % 10000) % 10000;
    do_fio(&c__1, (char *)&i__1, (ftnlen)sizeof(integer));
    e_wsfe();
    return 0;
} /* make1616_ */

/* Subroutine */ int makemthr_()
{
    /* Initialized data */

    static integer a = 2111111111;
    static integer b = 1492;
    static integer c = 1776;
    static integer d = 5115;
    static doublereal da = 2111111111.;
    static doublereal db = 1492.;
    static doublereal dc = 1776.;
    static doublereal dd = 5115.;

    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_602[] = "(\002  2,867,200 32-bit random integers (11,468\
,800 bytes)\002,/,\002  have been written to the file \002,a15)";

    /* System generated locals */
    doublereal d__1;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), f_open(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle();
    double d_int();
    integer s_wdue(), do_uio(), e_wdue();

    /* Local variables */
    static doublereal filename;
    static char text[80*23];
    static integer i, j, n[4096], v, w, x, y, z, carry, ij, jk;
    static doublereal dv, dw, dx, dy, dz;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___83 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___86 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___88 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___89 = { 0, 6, 0, 0, 0 };
    static cilist io___90 = { 0, 5, 0, 0, 0 };
    static cilist io___95 = { 0, 6, 0, 0, 0 };
    static cilist io___107 = { 0, 2, 0, 0, 0 };
    static cilist io___108 = { 0, 6, 0, 0, 0 };
    static cilist io___109 = { 0, 6, 0, 0, 0 };
    static cilist io___110 = { 0, 6, 0, fmt_602, 0 };
    static cilist io___112 = { 0, 6, 0, 0, 0 };


    s_rsfe(&io___83);
    for (j = 1; j <= 59; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___86);
    do_fio(&c__23, text, 80L);
    e_rsfe();
    s_wsfe(&io___88);
    do_fio(&c__23, text, 80L);
    e_wsfe();
/* L745: */
    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 7;
    o__1.ofnm = "mthr.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___89);
    do_lio(&c__9, &c__1, " Enter four seed integers:", 26L);
    e_wsle();
    s_rsle(&io___90);
    do_lio(&c__3, &c__1, (char *)&x, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&y, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&z, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&w, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___95);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
    jk = 0;
    for (ij = 1; ij <= 700; ++ij) {
	++jk;
	for (i = 1; i <= 4096; ++i) {
	    if (x < 0) {
		dx = x + 4294967296.;
	    } else {
		dx = (doublereal) x;
	    }
	    if (y < 0) {
		dy = y + 4294967296.;
	    } else {
		dy = (doublereal) y;
	    }
	    if (z < 0) {
		dz = z + 4294967296.;
	    } else {
		dz = (doublereal) z;
	    }
	    if (w < 0) {
		dw = w + 4294967296.;
	    } else {
		dw = (doublereal) w;
	    }
	    v = a * x + b * y + c * z + d * w + carry;
	    x = y;
	    y = z;
	    z = w;
	    w = v;
	    dv = da * dx + db * dy + dc * dz + dd * dw + carry;
	    d__1 = dv / 4294967296.;
	    carry = (integer) d_int(&d__1);
/* L2: */
	    n[i - 1] = w;
	}
/* L3: */
	io___107.cirec = jk;
	s_wdue(&io___107);
	do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___108);
    do_lio(&c__9, &c__1, "              ", 14L);
    e_wsle();
    s_wsle(&io___109);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsfe(&io___110);
    do_fio(&c__1, (char *)&filename, (ftnlen)sizeof(doublereal));
    e_wsfe();
    s_wsle(&io___112);
    do_lio(&c__9, &c__1, "  The period is about 2^158.97", 30L);
    e_wsle();
    return 0;
} /* makemthr_ */

/* Subroutine */ int makekiss_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char text[80*22];
    static integer b[4096], i, j, k, m, w, x, y, z, carry, jj, jk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___113 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___116 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___118 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___119 = { 0, 6, 0, 0, 0 };
    static cilist io___120 = { 0, 5, 0, 0, 0 };
    static cilist io___126 = { 0, 6, 0, 0, 0 };
    static cilist io___133 = { 0, 2, 0, 0, 0 };
    static cilist io___134 = { 0, 6, 0, 0, 0 };
    static cilist io___135 = { 0, 6, 0, 0, 0 };
    static cilist io___136 = { 0, 6, 0, 0, 0 };


    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 7;
    o__1.ofnm = "kiss.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___113);
    for (j = 1; j <= 82; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___116);
    do_fio(&c__22, text, 80L);
    e_rsfe();
    s_wsfe(&io___118);
    do_fio(&c__22, text, 80L);
    e_wsfe();
    s_wsle(&io___119);
    do_lio(&c__9, &c__1, " Enter four seed integers, not zero", 35L);
    e_wsle();
    s_rsle(&io___120);
    do_lio(&c__3, &c__1, (char *)&x, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&y, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&z, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&w, (ftnlen)sizeof(integer));
    e_rsle();
    carry = 0;
    s_wsle(&io___126);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (jj = 1; jj <= 4096; ++jj) {
	    x = x * 69069 + 1;
	    y ^= y << 13;
	    y ^= y >> 17;
	    y ^= y << 5;
	    k = (z >> 2) + (w >> 3) + (carry >> 2);
	    m = w + w + z + carry;
	    z = w;
	    w = m;
	    carry = k >> 30;
/* L33: */
	    b[jj - 1] = x + y + w;
	}
/* L2: */
	io___133.cirec = jk;
	s_wdue(&io___133);
	do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___134);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsle(&io___135);
    do_lio(&c__9, &c__1, "  2,867,200 32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___136);
    do_lio(&c__9, &c__1, "  have been written to the file kiss.32          ", 
	    49L);
    e_wsle();
    return 0;
} /* makekiss_ */

/* Subroutine */ int makecmbo_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_wsle(), 
	    do_lio(), e_wsle(), s_rsle(), e_rsle(), f_open(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char text[80*16];
    static integer b[4096], i, j, v, x, y, z, jk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___137 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___140 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___142 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___143 = { 0, 6, 0, 0, 0 };
    static cilist io___144 = { 0, 6, 0, 0, 0 };
    static cilist io___145 = { 0, 5, 0, 0, 0 };
    static cilist io___149 = { 0, 6, 0, 0, 0 };
    static cilist io___154 = { 0, 1, 0, 0, 0 };
    static cilist io___155 = { 0, 6, 0, 0, 0 };
    static cilist io___156 = { 0, 6, 0, 0, 0 };
    static cilist io___157 = { 0, 6, 0, 0, 0 };


/* ****Simple combo, period> 2^60.5 */
/* ***x(n)=x(n-1)*x(n-2) mod 2^32 added to */
/******period of x(n)=x(n-1)*x(n-2) is 3*2^29 if seeds odd, and one is +or
-3 mod*/
/* *****easy to ensure: replace seed x with 3*x*x. */
/* ****mwc z=30903*iand(z,65535)+ishft(z,-16) */
    s_rsfe(&io___137);
    for (j = 1; j <= 104; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___140);
    do_fio(&c__16, text, 80L);
    e_rsfe();
    s_wsfe(&io___142);
    do_fio(&c__16, text, 80L);
    e_wsfe();
    s_wsle(&io___143);
    do_lio(&c__9, &c__1, "              ", 14L);
    e_wsle();
    s_wsle(&io___144);
    do_lio(&c__9, &c__1, "  Enter three seed integers:", 28L);
    e_wsle();
    s_rsle(&io___145);
    do_lio(&c__3, &c__1, (char *)&x, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&y, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&z, (ftnlen)sizeof(integer));
    e_rsle();
    x = x + x + 1;
    x = x * 3 * x;
    y = y + y + 1;
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 8;
    o__1.ofnm = "combo.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___149);
    do_lio(&c__9, &c__1, "   Please wait..................", 32L);
    e_wsle();
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    v = x * y;
	    x = y;
	    y = v;
	    z = (z & 65535) * 30903 + (z >> 16);
/* L2: */
	    b[j - 1] = y + z;
	}
/* L3: */
	io___154.cirec = jk;
	s_wdue(&io___154);
	do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___155);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsle(&io___156);
    do_lio(&c__9, &c__1, "  2,867,200 32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___157);
    do_lio(&c__9, &c__1, "  have been written to the file combo.32          ",
	     50L);
    e_wsle();
    return 0;
} /* makecmbo_ */

/* Subroutine */ int makeltra_()
{
    /* Initialized data */

    static integer r = 99;
    static integer s = 33;

    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_25[] = "(5i12)";
    static char fmt_271[] = "(\002 p-value for KSTEST on uniformity of seeds\
: \002,f8.6)";

    /* System generated locals */
    integer i__1;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), f_open(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static integer juni, mwcs;
    static char text[80*15];
    static integer i, j, k, l, bb[4096], ig, ii, jk, ip, jp, js, ju[99];
    static real px, xx[607];
    extern /* Subroutine */ int kstest_();
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___160 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___163 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___165 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___166 = { 0, 6, 0, 0, 0 };
    static cilist io___167 = { 0, 5, 0, 0, 0 };
    static cilist io___176 = { 0, 6, 0, 0, 0 };
    static cilist io___177 = { 0, 6, 0, fmt_25, 0 };
    static cilist io___180 = { 0, 6, 0, fmt_271, 0 };
    static cilist io___181 = { 0, 6, 0, 0, 0 };
    static cilist io___187 = { 0, 1, 0, 0, 0 };
    static cilist io___188 = { 0, 6, 0, 0, 0 };
    static cilist io___189 = { 0, 6, 0, 0, 0 };
    static cilist io___190 = { 0, 6, 0, 0, 0 };
    static cilist io___191 = { 0, 6, 0, 0, 0 };
    static cilist io___192 = { 0, 6, 0, 0, 0 };


    s_rsfe(&io___160);
    for (j = 1; j <= 120; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___163);
    do_fio(&c__15, text, 80L);
    e_rsfe();
    s_wsfe(&io___165);
    do_fio(&c__15, text, 80L);
    e_wsfe();
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 8;
    o__1.ofnm = "ultra.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___166);
    do_lio(&c__9, &c__1, "   Enter four positive integers for seeds:", 42L);
    e_wsle();
    s_rsle(&io___167);
    do_lio(&c__3, &c__1, (char *)&i, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&j, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&k, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&l, (ftnlen)sizeof(integer));
    e_rsle();
    mwcs = i + j + k + l;
    i__1 = r;
    for (ii = 1; ii <= i__1; ++ii) {
	i = (i & 65535) * 18273 + (i >> 16);
	j = (j & 65535) * 23163 + (j >> 16);
	k = (k & 65535) * 24984 + (k >> 16);
	l = (l & 65535) * 28854 + (l >> 16);
	js = (i << 16) + (j & 65535) + (k << 16) + (l & 65535);
	js |= 1;
	xx[ii - 1] = js * (float)2.3283064365386963e-10 + (float).5;
/* L92: */
	ju[ii - 1] = js;
    }
    s_wsle(&io___176);
    do_lio(&c__9, &c__1, "    The seed table:", 19L);
    e_wsle();
    s_wsfe(&io___177);
    i__1 = r;
    for (ig = 1; ig <= i__1; ++ig) {
	do_fio(&c__1, (char *)&ju[ig - 1], (ftnlen)sizeof(integer));
    }
    e_wsfe();
    kstest_(xx, &r, &px);
    s_wsfe(&io___180);
    do_fio(&c__1, (char *)&px, (ftnlen)sizeof(real));
    e_wsfe();
    s_wsle(&io___181);
    do_lio(&c__9, &c__1, "    Please wait................", 31L);
    e_wsle();
    ip = r;
    jp = s;
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    juni = ju[ip - 1] * ju[jp - 1];
	    ju[ip - 1] = juni;
	    --ip;
	    if (ip == 0) {
		ip = 97;
	    }
	    --jp;
	    if (jp == 0) {
		jp = 97;
	    }
	    mwcs = (mwcs & 65535) * 30903 + (mwcs >> 16);
/* L3: */
	    bb[j - 1] = juni + mwcs;
	}
/* L2: */
	io___187.cirec = jk;
	s_wdue(&io___187);
	do_uio(&c__4096, (char *)&bb[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___188);
    do_lio(&c__9, &c__1, "     ", 5L);
    e_wsle();
    s_wsle(&io___189);
    do_lio(&c__9, &c__1, "     FINISHED", 13L);
    e_wsle();
    s_wsle(&io___190);
    do_lio(&c__9, &c__1, " 2,867,200  32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___191);
    do_lio(&c__9, &c__1, "  have been written to the file ultra.32  ", 42L);
    e_wsle();
    s_wsle(&io___192);
    do_lio(&c__9, &c__1, "::::::::::::::::::::::::::::::::::::::::::::::", 
	    46L);
    e_wsle();
    return 0;
} /* makeltra_ */

/* Subroutine */ int makesbmc_()
{
    /* Initialized data */

    static integer r = 37;
    static integer s = 24;

    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_25[] = "(5i12)";
    static char fmt_271[] = "(\002 p-value for KSTEST on uniformity of seeds\
: \002,f8.6)";
    static char fmt_349[] = "(\002     The binary file swbmwc.32\002/,\002  \
   has been created with 32-bit integers\002,/,\002     from the subtract-wi\
th-borrow sequence\002,/,\002    x(n)=x(n-24)-x(n-37)-borrow mod 2^32\002,/\
,\002   combined with the multiply-with-carry sequence\002,/,\002   y(n)=309\
03*y(n-1)+carry mod 2^16,\002,/,\002  the overall sequence having period abo\
ut 10^364.\002)";

    /* System generated locals */
    integer i__1;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_wsle(), 
	    do_lio(), e_wsle(), s_rsle(), e_rsle(), f_open(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static integer juni, mwcs;
    static char text[80*9];
    static integer i, j, k, l, m, x, y, bb[4096], ig, ii, jj, jk, ip, jp, js, 
	    ju[37];
    static real px, xx[37];
    extern /* Subroutine */ int kstest_();
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___195 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___198 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___200 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___201 = { 0, 6, 0, 0, 0 };
    static cilist io___202 = { 0, 5, 0, 0, 0 };
    static cilist io___206 = { 0, 6, 0, 0, 0 };
    static cilist io___214 = { 0, 6, 0, 0, 0 };
    static cilist io___215 = { 0, 6, 0, fmt_25, 0 };
    static cilist io___218 = { 0, 6, 0, fmt_271, 0 };
    static cilist io___226 = { 0, 1, 0, 0, 0 };
    static cilist io___227 = { 0, 6, 0, 0, 0 };
    static cilist io___228 = { 0, 6, 0, 0, 0 };
    static cilist io___229 = { 0, 6, 0, fmt_349, 0 };


    s_rsfe(&io___195);
    for (j = 1; j <= 135; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___198);
    do_fio(&c__9, text, 80L);
    e_rsfe();
    s_wsfe(&io___200);
    do_fio(&c__9, text, 80L);
    e_wsfe();
    s_wsle(&io___201);
    do_lio(&c__9, &c__1, "    Enter four positive integers for seeds:", 43L);
    e_wsle();
    s_rsle(&io___202);
    do_lio(&c__3, &c__1, (char *)&i, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&j, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&k, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&l, (ftnlen)sizeof(integer));
    e_rsle();
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 9;
    o__1.ofnm = "swbmwc.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___206);
    do_lio(&c__9, &c__1, "    Please wait................", 31L);
    e_wsle();
    mwcs = i + j + k + l;
    i__1 = r;
    for (ii = 1; ii <= i__1; ++ii) {
	js = (float)0.;
	for (jj = 1; jj <= 32; ++jj) {
	    m = i * j % 179 * k % 179;
	    i = j;
	    j = k;
	    k = m;
	    l = (l * 53 + 1) % 169;
	    js <<= 1;
	    if (l * m % 64 >= 32) {
		++js;
	    }
/* L93: */
	}
	xx[ii - 1] = js * (float)2.3283064365386963e-10 + (float).5;
/* L92: */
	ju[ii - 1] = js;
    }
    s_wsle(&io___214);
    do_lio(&c__9, &c__1, "    The seed table:", 19L);
    e_wsle();
    s_wsfe(&io___215);
    i__1 = r;
    for (ig = 1; ig <= i__1; ++ig) {
	do_fio(&c__1, (char *)&ju[ig - 1], (ftnlen)sizeof(integer));
    }
    e_wsfe();
    kstest_(xx, &r, &px);
    s_wsfe(&io___218);
    do_fio(&c__1, (char *)&px, (ftnlen)sizeof(real));
    e_wsfe();
    ip = r;
    jp = s;
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    x = ju[ip - 1];
	    y = ju[jp - 1];
	    juni = x - y;
	    if (x >> 1 > y >> 1) {
		--juni;
	    }
	    ju[ip - 1] = juni;
	    --ip;
	    if (ip == 0) {
		ip = r;
	    }
	    --jp;
	    if (jp == 0) {
		jp = r;
	    }
	    mwcs = (mwcs & 65535) * 30903 + (mwcs >> 16);
/* L3: */
	    bb[j - 1] = mwcs + juni;
	}
/* L2: */
	io___226.cirec = jk;
	s_wdue(&io___226);
	do_uio(&c__4096, (char *)&bb[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___227);
    do_lio(&c__9, &c__1, "     ", 5L);
    e_wsle();
    s_wsle(&io___228);
    do_lio(&c__9, &c__1, "     FINISHED", 13L);
    e_wsle();
    s_wsfe(&io___229);
    e_wsfe();
    return 0;
} /* makesbmc_ */

/* Subroutine */ int makexcng_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";

    /* System generated locals */
    doublereal d__1;
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle();
    double d_mod();
    integer s_wdue(), do_uio(), e_wdue();

    /* Local variables */
    static char text[80*17];
    static doublereal a, b, c;
    static integer i, j, n[4096];
    static doublereal x;
    static real r3, r4;
    static integer ij, jk, jch;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___230 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___233 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___235 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___236 = { 0, 6, 0, 0, 0 };
    static cilist io___237 = { 0, 5, 0, 0, 0 };
    static cilist io___241 = { 0, 6, 0, 0, 0 };
    static cilist io___250 = { 0, 2, 0, 0, 0 };
    static cilist io___251 = { 0, 6, 0, 0, 0 };
    static cilist io___252 = { 0, 6, 0, 0, 0 };
    static cilist io___253 = { 0, 6, 0, 0, 0 };
    static cilist io___254 = { 0, 6, 0, 0, 0 };


    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 9;
    o__1.ofnm = "excong.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___230);
    for (j = 1; j <= 144; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___233);
    do_fio(&c__17, text, 80L);
    e_rsfe();
    s_wsfe(&io___235);
    do_fio(&c__17, text, 80L);
    e_wsfe();
    s_wsle(&io___236);
    do_lio(&c__9, &c__1, " Enter three seed integers, not all zero:", 41L);
    e_wsle();
    s_rsle(&io___237);
    do_lio(&c__5, &c__1, (char *)&a, (ftnlen)sizeof(doublereal));
    do_lio(&c__5, &c__1, (char *)&b, (ftnlen)sizeof(doublereal));
    do_lio(&c__5, &c__1, (char *)&c, (ftnlen)sizeof(doublereal));
    e_rsle();
    s_wsle(&io___241);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
    r3 = (float).12500000308864409;
    r4 = (float).12500000592626775;
    jk = 0;
    for (ij = 1; ij <= 700; ++ij) {
	++jk;
	for (i = 1; i <= 4096; ++i) {
	    switch ((int)jch) {
		case 1:  goto L51;
		case 2:  goto L52;
		case 3:  goto L53;
		case 4:  goto L54;
	    }
L51:
	    d__1 = a * 1776. + b * 1476. + c * 1176.;
	    x = d_mod(&d__1, &c_b389);
	    goto L166;
L52:
	    d__1 = (a + b + c) * 8192;
	    x = d_mod(&d__1, &c_b389);
	    goto L166;
L53:
	    d__1 = a * 2001. + b * 1998. + c * 1995.;
	    x = d_mod(&d__1, &c_b392);
	    x *= r3;
	    goto L166;
L54:
	    d__1 = (a + b + c) * 524288.;
	    x = d_mod(&d__1, &c_b393);
	    x *= r4;
L166:
	    a = b;
	    b = c;
	    c = x;
	    if (x < (float)2147483648.) {
		n[i - 1] = (integer) x;
	    } else {
		n[i - 1] = (integer) (x - 4294967296.);
	    }
/* L2: */
	}
/* L3: */
	io___250.cirec = jk;
	s_wdue(&io___250);
	do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___251);
    do_lio(&c__9, &c__1, "              ", 14L);
    e_wsle();
    s_wsle(&io___252);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsle(&io___253);
    do_lio(&c__9, &c__1, "  2,867,200 32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___254);
    do_lio(&c__9, &c__1, "  have been written to the file excong.32          "
	    , 51L);
    e_wsle();
    return 0;
} /* makexcng_ */

/* Subroutine */ int makesupr_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_821[] = "(a1)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char text[80*20];
    static integer i, j, n[4096], x, y, jk;
    static char op[1], dum[80];

    /* Fortran I/O blocks */
    static cilist io___255 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___258 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___260 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___261 = { 0, 6, 0, 0, 0 };
    static cilist io___262 = { 0, 5, 0, 0, 0 };
    static cilist io___265 = { 0, 6, 0, 0, 0 };
    static cilist io___266 = { 0, 6, 0, 0, 0 };
    static cilist io___267 = { 0, 5, 0, fmt_821, 0 };
    static cilist io___269 = { 0, 6, 0, 0, 0 };
    static cilist io___273 = { 0, 2, 0, 0, 0 };
    static cilist io___274 = { 0, 2, 0, 0, 0 };
    static cilist io___275 = { 0, 6, 0, 0, 0 };
    static cilist io___276 = { 0, 6, 0, 0, 0 };
    static cilist io___277 = { 0, 6, 0, 0, 0 };


    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 11;
    o__1.ofnm = "suprdupr.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___255);
    for (j = 1; j <= 161; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___258);
    do_fio(&c__20, text, 80L);
    e_rsfe();
    s_wsfe(&io___260);
    do_fio(&c__20, text, 80L);
    e_wsfe();
    s_wsle(&io___261);
    do_lio(&c__9, &c__1, " Enter two  seed integers, the second not zero:", 
	    47L);
    e_wsle();
    s_rsle(&io___262);
    do_lio(&c__3, &c__1, (char *)&x, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&y, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___265);
    do_lio(&c__9, &c__1, "  Choose your method of combination,", 36L);
    e_wsle();
    s_wsle(&io___266);
    do_lio(&c__9, &c__1, "  + for addition, x for exclusive-or, in column 1:",
	     50L);
    e_wsle();
    s_rsfe(&io___267);
    do_fio(&c__1, op, 1L);
    e_rsfe();
    s_wsle(&io___269);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
    jk = 0;
    if (*(unsigned char *)op == '+') {
	for (i = 1; i <= 700; ++i) {
	    ++jk;
	    for (j = 1; j <= 4096; ++j) {
		x = x * 69069 + 1;
		y ^= y << 13;
		y ^= y >> 17;
		y ^= y << 5;
/* L3: */
		n[j - 1] = x + y;
	    }
/* L2: */
	    io___273.cirec = jk;
	    s_wdue(&io___273);
	    do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	    e_wdue();
	}
    }
    if (*(unsigned char *)op == 'x') {
	for (i = 1; i <= 700; ++i) {
	    ++jk;
	    for (j = 1; j <= 4096; ++j) {
		x = x * 69069 + 1;
		y ^= y << 13;
		y ^= y >> 17;
		y ^= y << 5;
/* L73: */
		n[j - 1] = x ^ y;
	    }
/* L72: */
	    io___274.cirec = jk;
	    s_wdue(&io___274);
	    do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	    e_wdue();
	}
    }
    s_wsle(&io___275);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsle(&io___276);
    do_lio(&c__9, &c__1, "  2,867,200 32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___277);
    do_lio(&c__9, &c__1, "  have been written to the file suprdupr.32  ", 45L)
	    ;
    e_wsle();
    return 0;
} /* makesupr_ */

/* Subroutine */ int makeswb_()
{
    /* Initialized data */

    static integer rc[5] = { 43,37,24,21,48 };
    static integer sc[5] = { 22,24,19,6,8 };
    static integer jix[5] = { -6,0,0,0,2147483647 };
    static char swb[42*5+1] = "   1:   x(n)=x(n-43)-x(n-22)-c mod 2^32-5    \
2:   x(n)=x(n-37)-x(n-24)-c mod 2^32      3:   x(n)=x(n-24)-x(n-19)-c mod 2^\
32      4:   x(n)=x(n-21)-x(n- 6)-c mod 2^32      5:   x(n)=x(n-48)-x(n- 8)-\
c mod 2^31   ";
    static char period[42*5+1] = "  (2^32-5)^43 - (2^32-5)^22, about 10^414 \
  2^1178 - 2^762, about 10^354              (2^759 - 2^599)/3, about 10^228 \
          (2^666 - 2^186)/3, about 10^200           (2^1478 - 2^247)/105, ab\
out 10^445      ";

    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_945[] = "(10x,a42)";
    static char fmt_645[] = "(a15)";
    static char fmt_348[] = "(\002    Enter four positive integers for see\
ds:\002)";
    static char fmt_349[] = "(\002     The binary file \002,a15,/,\002     h\
as been created with 32-bit integers\002,/,\002     from the subtract-with-b\
orrow sequence\002,/,a41)";
    static char fmt_350[] = "(15x,\002The period is\002,/,a41)";

    /* System generated locals */
    integer i__1;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_wsle(), 
	    do_lio(), e_wsle(), s_rsle(), e_rsle(), f_open(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char filename[15];
    static integer juni;
    static char text[80*17];
    static integer i, j, k, l, m, r, s, x, y, bb[4096], ii, jj, jk, ip, jp, 
	    js, ju[48], ijk, jjn, jchoice;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___281 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___284 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___286 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___287 = { 0, 6, 0, 0, 0 };
    static cilist io___288 = { 0, 6, 0, fmt_945, 0 };
    static cilist io___290 = { 0, 6, 0, 0, 0 };
    static cilist io___291 = { 0, 6, 0, 0, 0 };
    static cilist io___292 = { 0, 5, 0, 0, 0 };
    static cilist io___296 = { 0, 6, 0, 0, 0 };
    static cilist io___297 = { 0, 5, 0, fmt_645, 0 };
    static cilist io___299 = { 0, 6, 0, fmt_348, 0 };
    static cilist io___300 = { 0, 5, 0, 0, 0 };
    static cilist io___304 = { 0, 6, 0, 0, 0 };
    static cilist io___319 = { 0, 1, 0, 0, 0 };
    static cilist io___320 = { 0, 6, 0, 0, 0 };
    static cilist io___321 = { 0, 6, 0, 0, 0 };
    static cilist io___322 = { 0, 6, 0, fmt_349, 0 };
    static cilist io___323 = { 0, 6, 0, fmt_350, 0 };
    static cilist io___325 = { 0, 6, 0, 0, 0 };


    s_rsfe(&io___281);
    for (j = 1; j <= 181; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___284);
    do_fio(&c__17, text, 80L);
    e_rsfe();
    s_wsfe(&io___286);
    do_fio(&c__17, text, 80L);
    e_wsfe();
    s_wsle(&io___287);
    do_lio(&c__9, &c__1, "    Choose your generator from this list:", 41L);
    e_wsle();
    s_wsfe(&io___288);
    do_fio(&c__5, swb, 42L);
    e_wsfe();
    s_wsle(&io___290);
    do_lio(&c__9, &c__1, "(Choice 5 provides 31-bit integers that are left-j\
ustified.)", 60L);
    e_wsle();
    s_wsle(&io___291);
    do_lio(&c__9, &c__1, " enter 1,2,3,4 or 5:", 20L);
    e_wsle();
    s_rsle(&io___292);
    do_lio(&c__3, &c__1, (char *)&jchoice, (ftnlen)sizeof(integer));
    e_rsle();
    r = rc[jchoice - 1];
    s = sc[jchoice - 1];
    s_wsle(&io___296);
    do_lio(&c__9, &c__1, "     Enter output file name (<=15 characters):", 
	    46L);
    e_wsle();
    s_rsfe(&io___297);
    do_fio(&c__1, filename, 15L);
    e_rsfe();
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 15;
    o__1.ofnm = filename;
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsfe(&io___299);
    e_wsfe();
    s_rsle(&io___300);
    do_lio(&c__3, &c__1, (char *)&i, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&j, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&k, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&l, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___304);
    do_lio(&c__9, &c__1, "    Please wait................", 31L);
    e_wsle();
    i__1 = i;
    for (ijk = 1; ijk <= i__1; ++ijk) {
/* L90: */
	jjn = 1;
    }
/* 90            jjn=irand(1) */
    i__1 = r;
    for (ii = 1; ii <= i__1; ++ii) {
	js = (float)0.;
	for (jj = 1; jj <= 32; ++jj) {
	    m = i * j % 179 * k % 179;
	    i = j;
	    j = k;
	    k = m;
	    l = (l * 53 + 1) % 169;
	    js <<= 1;
	    if (l * m % 64 >= 32) {
		++js;
	    }
/* L93: */
	}
	if (jchoice == 5) {
	    js ^= 1;
	}
/* L92: */
	ju[ii - 1] = js;
    }
    ip = r;
    jp = s;
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    x = ju[ip - 1];
	    y = ju[jp - 1];
	    juni = x - y;
	    if (x >> 1 < y >> 1) {
		juni += jix[jchoice - 1];
	    }
	    ju[ip - 1] = juni;
	    --ip;
	    if (ip == 0) {
		ip = r;
	    }
	    --jp;
	    if (jp == 0) {
		jp = r;
	    }
	    if (jchoice == 5) {
		juni += juni;
	    }
/* L3: */
	    bb[j - 1] = juni;
	}
/* L2: */
	io___319.cirec = jk;
	s_wdue(&io___319);
	do_uio(&c__4096, (char *)&bb[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___320);
    do_lio(&c__9, &c__1, "     ", 5L);
    e_wsle();
    s_wsle(&io___321);
    do_lio(&c__9, &c__1, "     FINISHED", 13L);
    e_wsle();
    s_wsfe(&io___322);
    do_fio(&c__1, filename, 15L);
    do_fio(&c__1, swb + (jchoice - 1) * 42, 42L);
    e_wsfe();
    s_wsfe(&io___323);
    do_fio(&c__1, period + (jchoice - 1) * 42, 42L);
    e_wsfe();
    s_wsle(&io___325);
    do_lio(&c__9, &c__1, "++++++++++++++++++++++++++++++++++++++++++++++++++\
+++++", 55L);
    e_wsle();
    return 0;
} /* makeswb_ */

/* Subroutine */ int makecong_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_645[] = "(a15)";
    static char fmt_221[] = "(\002  2,867,200 32-bit random integers (11,468\
,800 bytes)\002,/,\002  have been written to the file \002,a15)";
    static char fmt_983[] = "(a1)";

    /* System generated locals */
    integer i__1, i__2;
    doublereal d__1, d__2;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_wsle(), 
	    do_lio(), e_wsle(), s_rsle(), e_rsle();
    double pow_di();
    integer f_open();
    double d_mod();
    integer s_wdue(), do_uio(), e_wdue();

    /* Local variables */
    static integer jlat, klim;
    static char filename[15], text[80*13];
    extern /* Subroutine */ int plot1_();
    static integer a, b, i, j, k, r, s;
    static real x[2000], y[2000];
    static integer jseed, j1, j2, kount, bb[4096];
    static doublereal da, db, dj, dl, dm;
    static integer jk;
    static doublereal dr, dx;
    static char op[1];
    static doublereal yy, dum;

    /* Fortran I/O blocks */
    static cilist io___326 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___329 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___331 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___332 = { 0, 6, 0, 0, 0 };
    static cilist io___333 = { 0, 6, 0, 0, 0 };
    static cilist io___334 = { 0, 6, 0, 0, 0 };
    static cilist io___335 = { 0, 5, 0, 0, 0 };
    static cilist io___340 = { 0, 6, 0, 0, 0 };
    static cilist io___341 = { 0, 5, 0, 0, 0 };
    static cilist io___346 = { 0, 6, 0, 0, 0 };
    static cilist io___347 = { 0, 6, 0, 0, 0 };
    static cilist io___348 = { 0, 6, 0, 0, 0 };
    static cilist io___349 = { 0, 5, 0, 0, 0 };
    static cilist io___351 = { 0, 6, 0, 0, 0 };
    static cilist io___352 = { 0, 5, 0, fmt_645, 0 };
    static cilist io___354 = { 0, 6, 0, 0, 0 };
    static cilist io___361 = { 0, 1, 0, 0, 0 };
    static cilist io___362 = { 0, 6, 0, fmt_221, 0 };
    static cilist io___363 = { 0, 6, 0, 0, 0 };
    static cilist io___364 = { 0, 6, 0, 0, 0 };
    static cilist io___365 = { 0, 5, 0, fmt_983, 0 };


    s_rsfe(&io___326);
    for (j = 1; j <= 198; ++j) {
	do_fio(&c__1, (char *)&dum, (ftnlen)sizeof(doublereal));
    }
    e_rsfe();
    s_rsfe(&io___329);
    do_fio(&c__13, text, 80L);
    e_rsfe();
    s_wsfe(&io___331);
    do_fio(&c__13, text, 80L);
    e_wsfe();
    s_wsle(&io___332);
    do_lio(&c__9, &c__1, " Enter a,b,r and s for the generator", 36L);
    e_wsle();
    s_wsle(&io___333);
    do_lio(&c__9, &c__1, "  x(n)=a*x(n-1)+b mod 2^r+s", 27L);
    e_wsle();
    s_wsle(&io___334);
    do_lio(&c__9, &c__1, " To avoid overflow, make sure a*2^r < 2^53) ", 44L);
    e_wsle();
    s_rsle(&io___335);
    do_lio(&c__3, &c__1, (char *)&a, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&b, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&r, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&s, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___340);
    do_lio(&c__9, &c__1, " Enter a seed integer:", 22L);
    e_wsle();
    s_rsle(&io___341);
    do_lio(&c__3, &c__1, (char *)&jseed, (ftnlen)sizeof(integer));
    e_rsle();
    da = (doublereal) a;
    db = (doublereal) b;
    dm = pow_di(&c_b546, &r) + s;
    s_wsle(&io___346);
    do_lio(&c__9, &c__1, " If you want the 2-lattice without generating", 45L)
	    ;
    e_wsle();
    s_wsle(&io___347);
    do_lio(&c__9, &c__1, " the binary file, enter 0, else enter 1:", 40L);
    e_wsle();
    s_wsle(&io___348);
    do_lio(&c__9, &c__1, "   Create binary file? 0 for NO, 1 for YES:", 43L);
    e_wsle();
    s_rsle(&io___349);
    do_lio(&c__3, &c__1, (char *)&jlat, (ftnlen)sizeof(integer));
    e_rsle();
    if (jlat == 1) {
	s_wsle(&io___351);
	do_lio(&c__9, &c__1, "     Enter output file name (<=15 characters):",
		 46L);
	e_wsle();
	s_rsfe(&io___352);
	do_fio(&c__1, filename, 15L);
	e_rsfe();
	o__1.oerr = 0;
	o__1.ounit = 1;
	o__1.ofnmlen = 15;
	o__1.ofnm = filename;
	o__1.orl = 16384;
	o__1.osta = 0;
	o__1.oacc = "direct";
	o__1.ofm = "unformatted";
	o__1.oblnk = 0;
	f_open(&o__1);
	s_wsle(&io___354);
	do_lio(&c__9, &c__1, "   Please wait................", 30L);
	e_wsle();
	dj = (doublereal) jseed;
	i__1 = 32 - r;
	dr = pow_di(&c_b546, &i__1);
	jk = 0;
	for (i = 1; i <= 700; ++i) {
	    ++jk;
	    for (j = 1; j <= 4096; ++j) {
		d__1 = da * dj + db;
		dj = d_mod(&d__1, &dm);
		dx = dr * dj;
		if (dx < 2147483648.) {
		    bb[j - 1] = (integer) dx;
		} else {
		    bb[j - 1] = (integer) (dx - 4294967296.);
		}
/* L3: */
	    }
/* L2: */
	    io___361.cirec = jk;
	    s_wdue(&io___361);
	    do_uio(&c__4096, (char *)&bb[0], (ftnlen)sizeof(integer));
	    e_wdue();
	}
    }
    s_wsfe(&io___362);
    do_fio(&c__1, filename, 15L);
    e_wsfe();
    s_wsle(&io___363);
    do_lio(&c__9, &c__1, " To display the 2-lattice of this generator, ", 45L)
	    ;
    e_wsle();
    s_wsle(&io___364);
    do_lio(&c__9, &c__1, "  hit any letter or number key:", 31L);
    e_wsle();
    s_rsfe(&io___365);
    do_fio(&c__1, op, 1L);
    e_rsfe();
    i__1 = r - 12;
    dl = pow_di(&c_b546, &i__1);
    kount = 0;
    klim = (integer) (da * dl / dm);
    i__1 = klim;
    for (k = 1; k <= i__1; ++k) {
/* Computing MAX */
	d__1 = 0., d__2 = (k * dm - b) / da;
	j1 = (integer) max(d__1,d__2);
	j2 = (integer) ((k * dm - b + dl) / da);
	i__2 = j2;
	for (j = j1; j <= i__2; ++j) {
	    d__1 = da * j + db;
	    yy = d_mod(&d__1, &dm);
	    if (yy < dl) {
		++kount;
		x[kount - 1] = j / dm;
		y[kount - 1] = yy / dm;
	    }
/* L39: */
	}
/* L29: */
    }
    plot1_(x, y, &kount, &c__54);
    return 0;
} /* makecong_ */

/* Subroutine */ int makeran2_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static integer idum;
    static char text[80*16];
    extern integer iran2_();
    static integer b[4096], i, j, jseed, ij, jk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___376 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___379 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___381 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___382 = { 0, 6, 0, 0, 0 };
    static cilist io___383 = { 0, 5, 0, 0, 0 };
    static cilist io___390 = { 0, 2, 0, 0, 0 };
    static cilist io___391 = { 0, 6, 0, 0, 0 };
    static cilist io___392 = { 0, 6, 0, 0, 0 };


    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 7;
    o__1.ofnm = "ran2.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___376);
    for (j = 1; j <= 211; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___379);
    do_fio(&c__16, text, 80L);
    e_rsfe();
    s_wsfe(&io___381);
    do_fio(&c__16, text, 80L);
    e_wsfe();
    s_wsle(&io___382);
    do_lio(&c__9, &c__1, " enter a seed integer", 21L);
    e_wsle();
    s_rsle(&io___383);
    do_lio(&c__3, &c__1, (char *)&jseed, (ftnlen)sizeof(integer));
    e_rsle();
    idum = -abs(jseed);
    jk = 0;
    for (ij = 1; ij <= 700; ++ij) {
	++jk;
	for (i = 1; i <= 4096; ++i) {
/* L2: */
	    b[i - 1] = iran2_(&idum) << 1;
	}
/* L3: */
	io___390.cirec = jk;
	s_wdue(&io___390);
	do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___391);
    do_lio(&c__9, &c__1, "  Now 2,867,200 left-adjusted integers from ran2", 
	    48L);
    e_wsle();
    s_wsle(&io___392);
    do_lio(&c__9, &c__1, "  (11,486,800 bytes) have been written to ran2.32", 
	    49L);
    e_wsle();
    return 0;
} /* makeran2_ */

integer iran2_(idum)
integer *idum;
{
    /* Initialized data */

    static integer idum2 = 123456789;
    static integer iv[32] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
	    0,0,0,0,0,0,0,0 };
    static integer iy = 0;

    /* System generated locals */
    integer ret_val, i__1;

    /* Local variables */
    static integer j, k;

    if (*idum <= 0) {
/* Computing MAX */
	i__1 = -(*idum);
	*idum = max(i__1,1);
	idum2 = *idum;
	for (j = 40; j >= 1; --j) {
	    k = *idum / 53668;
	    *idum = (*idum - k * 53668) * 40014 - k * 12211;
	    if (*idum < 0) {
		*idum += 2147483563;
	    }
	    if (j <= 32) {
		iv[j - 1] = *idum;
	    }
/* L11: */
	}
	iy = iv[0];
    }
    k = *idum / 53668;
    *idum = (*idum - k * 53668) * 40014 - k * 12211;
    if (*idum < 0) {
	*idum += 2147483563;
    }
    k = idum2 / 52774;
    idum2 = (idum2 - k * 52774) * 40692 - k * 3791;
    if (idum2 < 0) {
	idum2 += 2147483399;
    }
    j = iy / 67108862 + 1;
    iy = iv[j - 1] - idum2;
    iv[j - 1] = *idum;
    if (iy < 1) {
	iy += 2147483562;
    }
    ret_val = iy;
/*      ran2=min(AM*iy,RNMX) */
    return ret_val;
} /* iran2_ */

/* Subroutine */ int makeshrg_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_645[] = "(a15)";
    static char fmt_221[] = "(\002  2,867,200 32-bit random integers (11,468\
,800 bytes)\002,/,\002  have been written to the file \002,a15)";
    static char fmt_225[] = "(\002 The period of your generator is 2^\002,\
i2,\002-1.\002)";
    static char fmt_226[] = "(\002 The period of your generator is 2^32-2^21\
-2^11+1.\002)";

    /* System generated locals */
    integer i__1, i__2;
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_wsle(), 
	    do_lio(), e_wsle(), f_open(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static integer mask;
    static char filename[15], text[80*12];
    static integer b[4096], i, j, l, r, nbits, i1, l2, jk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___398 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___401 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___403 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___404 = { 0, 6, 0, 0, 0 };
    static cilist io___405 = { 0, 5, 0, fmt_645, 0 };
    static cilist io___407 = { 0, 6, 0, 0, 0 };
    static cilist io___408 = { 0, 5, 0, 0, 0 };
    static cilist io___411 = { 0, 6, 0, 0, 0 };
    static cilist io___412 = { 0, 6, 0, 0, 0 };
    static cilist io___413 = { 0, 6, 0, 0, 0 };
    static cilist io___414 = { 0, 5, 0, 0, 0 };
    static cilist io___418 = { 0, 6, 0, 0, 0 };
    static cilist io___419 = { 0, 5, 0, 0, 0 };
    static cilist io___420 = { 0, 6, 0, 0, 0 };
    static cilist io___424 = { 0, 1, 0, 0, 0 };
    static cilist io___425 = { 0, 6, 0, 0, 0 };
    static cilist io___426 = { 0, 6, 0, 0, 0 };
    static cilist io___427 = { 0, 6, 0, 0, 0 };
    static cilist io___428 = { 0, 6, 0, 0, 0 };
    static cilist io___429 = { 0, 5, 0, 0, 0 };
    static cilist io___431 = { 0, 6, 0, 0, 0 };
    static cilist io___432 = { 0, 5, 0, 0, 0 };
    static cilist io___433 = { 0, 6, 0, 0, 0 };
    static cilist io___434 = { 0, 1, 0, 0, 0 };
    static cilist io___435 = { 0, 1, 0, 0, 0 };
    static cilist io___436 = { 0, 6, 0, 0, 0 };
    static cilist io___437 = { 0, 6, 0, fmt_221, 0 };
    static cilist io___438 = { 0, 6, 0, fmt_225, 0 };
    static cilist io___439 = { 0, 6, 0, fmt_226, 0 };


/* *** creates shift register random number file */
/*  use 13,18 or 7,24 or 6,25 or 3,28 or reverse for 31 bits */
/* use 15,17 or 13,17,5 for 32 bits */
    s_rsfe(&io___398);
    for (j = 1; j <= 227; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___401);
    do_fio(&c__12, text, 80L);
    e_rsfe();
    s_wsfe(&io___403);
    do_fio(&c__12, text, 80L);
    e_wsfe();
    s_wsle(&io___404);
    do_lio(&c__9, &c__1, "  Enter output file name (<= 15 characters):", 44L);
    e_wsle();
    s_rsfe(&io___405);
    do_fio(&c__1, filename, 15L);
    e_rsfe();
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 15;
    o__1.ofnm = filename;
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsle(&io___407);
    do_lio(&c__9, &c__1, "   Choose number of bits, 31 or 32:", 35L);
    e_wsle();
    s_rsle(&io___408);
    do_lio(&c__3, &c__1, (char *)&nbits, (ftnlen)sizeof(integer));
    e_rsle();
    jk = 0;
    if (nbits == 31) {
	s_wsle(&io___411);
	do_lio(&c__9, &c__1, "  Choose Left,Right shifts from these choices:",
		 46L);
	e_wsle();
	s_wsle(&io___412);
	do_lio(&c__9, &c__1, "    13,18  18,13  24,7  7,24 6,25  25,6  28,3 \
 3,28", 51L);
	e_wsle();
	s_wsle(&io___413);
	do_lio(&c__9, &c__1, "  enter two integers, L and R, in free format:",
		 46L);
	e_wsle();
	s_rsle(&io___414);
	do_lio(&c__3, &c__1, (char *)&l, (ftnlen)sizeof(integer));
	do_lio(&c__3, &c__1, (char *)&r, (ftnlen)sizeof(integer));
	e_rsle();
	mask = 2147483647;
	s_wsle(&io___418);
	do_lio(&c__9, &c__1, " Enter seed integer, not zero:", 30L);
	e_wsle();
	s_rsle(&io___419);
	do_lio(&c__3, &c__1, (char *)&j, (ftnlen)sizeof(integer));
	e_rsle();
	s_wsle(&io___420);
	do_lio(&c__9, &c__1, "  Please wait..............", 27L);
	e_wsle();
	for (i1 = 1; i1 <= 700; ++i1) {
	    ++jk;
	    for (i = 1; i <= 4096; ++i) {
		i__1 = (j ^ j << l) & mask;
		j = i__1 ^ i__1 >> r;
/* L3: */
		b[i - 1] = j + j;
	    }
/* L2: */
	    io___424.cirec = jk;
	    s_wdue(&io___424);
	    do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
	    e_wdue();
	}
    }
    if (nbits == 32) {
	s_wsle(&io___425);
	do_lio(&c__9, &c__1, " For 32 bit integers, you have three choices.", 
		45L);
	e_wsle();
	s_wsle(&io___426);
	do_lio(&c__9, &c__1, "  two shifts: (L,R)=(17,15) or (15,17) and", 
		42L);
	e_wsle();
	s_wsle(&io___427);
	do_lio(&c__9, &c__1, "  three shifts (L1,R,L2)=(13,17,5).", 35L);
	e_wsle();
	s_wsle(&io___428);
	do_lio(&c__9, &c__1, " Enter three integers, 17 15 0 or 15 17 0 or 1\
3 17 5:", 53L);
	e_wsle();
	s_rsle(&io___429);
	do_lio(&c__3, &c__1, (char *)&l, (ftnlen)sizeof(integer));
	do_lio(&c__3, &c__1, (char *)&r, (ftnlen)sizeof(integer));
	do_lio(&c__3, &c__1, (char *)&l2, (ftnlen)sizeof(integer));
	e_rsle();
	s_wsle(&io___431);
	do_lio(&c__9, &c__1, " Enter seed integer, not zero:", 30L);
	e_wsle();
	s_rsle(&io___432);
	do_lio(&c__3, &c__1, (char *)&j, (ftnlen)sizeof(integer));
	e_rsle();
	s_wsle(&io___433);
	do_lio(&c__9, &c__1, "  Please wait..............", 27L);
	e_wsle();
	if (l2 == 0) {
	    for (i1 = 1; i1 <= 700; ++i1) {
		++jk;
		for (i = 1; i <= 4096; ++i) {
		    i__1 = j ^ j << l;
		    j = i__1 ^ i__1 >> r;
/* L5: */
		    b[i - 1] = j;
		}
/* L4: */
		io___434.cirec = jk;
		s_wdue(&io___434);
		do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
		e_wdue();
	    }
	} else if (l2 == 5) {
	    for (i1 = 1; i1 <= 700; ++i1) {
		++jk;
		for (i = 1; i <= 4096; ++i) {
		    i__1 = j ^ j << l;
		    i__2 = i__1 ^ i__1 >> r;
		    j = i__2 ^ i__2 << l2;
/* L7: */
		    b[i - 1] = j;
		}
/* L6: */
		io___435.cirec = jk;
		s_wdue(&io___435);
		do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
		e_wdue();
	    }
	}
    }
    s_wsle(&io___436);
    do_lio(&c__9, &c__1, "      FINISHED", 14L);
    e_wsle();
    s_wsfe(&io___437);
    do_fio(&c__1, filename, 15L);
    e_wsfe();
    if (nbits == 31 || l2 == 5) {
	s_wsfe(&io___438);
	do_fio(&c__1, (char *)&nbits, (ftnlen)sizeof(integer));
	e_wsfe();
    }
    if (l == 15 || l == 17) {
	s_wsfe(&io___439);
	e_wsfe();
    }
    return 0;
} /* makeshrg_ */

/* Subroutine */ int makesunr_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle(), s_wdue(), 
	    do_uio(), e_wdue();

    /* Local variables */
    static char text[80*18];
    static integer b[4096], i, j, jseed, jk, ijk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___440 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___443 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___445 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___446 = { 0, 6, 0, 0, 0 };
    static cilist io___447 = { 0, 5, 0, 0, 0 };
    static cilist io___449 = { 0, 6, 0, 0, 0 };
    static cilist io___454 = { 0, 2, 0, 0, 0 };
    static cilist io___455 = { 0, 6, 0, 0, 0 };
    static cilist io___456 = { 0, 6, 0, 0, 0 };
    static cilist io___457 = { 0, 6, 0, 0, 0 };
    static cilist io___458 = { 0, 6, 0, 0, 0 };


    o__1.oerr = 0;
    o__1.ounit = 2;
    o__1.ofnmlen = 9;
    o__1.ofnm = "sunran.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___440);
    for (j = 1; j <= 239; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___443);
    do_fio(&c__18, text, 80L);
    e_rsfe();
    s_wsfe(&io___445);
    do_fio(&c__18, text, 80L);
    e_wsfe();
    s_wsle(&io___446);
    do_lio(&c__9, &c__1, " Enter one  seed integer:", 25L);
    e_wsle();
    s_rsle(&io___447);
    do_lio(&c__3, &c__1, (char *)&jseed, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___449);
    do_lio(&c__9, &c__1, "       Please wait..............", 32L);
    e_wsle();
/*       ijk=irand(jseed) */
    ijk = 1;
    jk = 0;
    for (j = 1; j <= 700; ++j) {
	++jk;
	for (i = 1; i <= 4096; ++i) {
/* L2: */
	    b[i - 1] = 1;
	}
/* 2      b(i)=irand(1) */
/* L3: */
	io___454.cirec = jk;
	s_wdue(&io___454);
	do_uio(&c__4096, (char *)&b[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsle(&io___455);
    do_lio(&c__9, &c__1, "            FINISHED", 20L);
    e_wsle();
    s_wsle(&io___456);
    do_lio(&c__9, &c__1, " 2,867,200  32-bit random integers (11,468,800 byt\
es)", 53L);
    e_wsle();
    s_wsle(&io___457);
    do_lio(&c__9, &c__1, "  have been written to the file sunran.32  ", 43L);
    e_wsle();
    s_wsle(&io___458);
    do_lio(&c__9, &c__1, "  Note: the rightmost bit is always 0", 37L);
    e_wsle();
    return 0;
} /* makesunr_ */

/* Subroutine */ int makefibo_()
{
    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_346[] = "(\002 Enter lags r and s from this list:\002,/\
,\002    17,5  33,13  39,14  55,24  63,31  73,25  97,33 607,273\002,/,\002  \
   and op code: 1 for + , 2 for -, 3 for *, 4 for xor:\002)";
    static char fmt_645[] = "(a15)";
    static char fmt_348[] = "(\002    Enter four positive integers for see\
ds:\002)";
    static char fmt_349[] = "(\002     The binary file \002,a15,/,\002     h\
as been created with 32-bit integers\002,/,\002     from the lagged-Fibonacc\
i sequence\002)";
    static char fmt_351[] = "(15x,\002x(n) = x(n-\002,i3,\002) + x(n-\002,\
i3,\002) mod 2^32\002)";
    static char fmt_352[] = "(15x,\002x(n) = x(n-\002,i3,\002) - x(n-\002,\
i3,\002) mod 2^32\002)";
    static char fmt_353[] = "(15x,\002x(n) = x(n-\002,i3,\002) * x(n-\002,\
i3,\002) mod 2^32\002)";
    static char fmt_354[] = "(15x,\002x(n) = x(n-\002,i3,\002) xor x(n-\002,\
i3,\002)\002)";
    static char fmt_355[] = "(\002   The period of the sequence is \002)";

    /* System generated locals */
    olist o__1;

    /* Builtin functions */
    integer s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), s_rsle(), 
	    do_lio(), e_rsle(), s_wsle(), e_wsle(), f_open(), s_wdue(), 
	    do_uio(), e_wdue();
    double pow_di();

    /* Local variables */
    static char filename[15];
    static integer juni;
    static char text[80*9];
    static integer i, j, k, l, m, r, s, bb[4096], ii, jj, jk, ip, jp, js, op, 
	    ju[607];
    static doublereal period;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___459 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___462 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___464 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___465 = { 0, 6, 0, fmt_346, 0 };
    static cilist io___466 = { 0, 5, 0, 0, 0 };
    static cilist io___470 = { 0, 6, 0, 0, 0 };
    static cilist io___471 = { 0, 5, 0, fmt_645, 0 };
    static cilist io___473 = { 0, 6, 0, fmt_348, 0 };
    static cilist io___474 = { 0, 5, 0, 0, 0 };
    static cilist io___478 = { 0, 6, 0, 0, 0 };
    static cilist io___489 = { 0, 1, 0, 0, 0 };
    static cilist io___491 = { 0, 6, 0, 0, 0 };
    static cilist io___492 = { 0, 6, 0, 0, 0 };
    static cilist io___493 = { 0, 6, 0, fmt_349, 0 };
    static cilist io___494 = { 0, 6, 0, 0, 0 };
    static cilist io___495 = { 0, 6, 0, fmt_351, 0 };
    static cilist io___496 = { 0, 6, 0, fmt_352, 0 };
    static cilist io___497 = { 0, 6, 0, fmt_353, 0 };
    static cilist io___498 = { 0, 6, 0, fmt_354, 0 };
    static cilist io___499 = { 0, 6, 0, fmt_355, 0 };
    static cilist io___500 = { 0, 6, 0, 0, 0 };


    s_rsfe(&io___459);
    for (j = 1; j <= 257; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___462);
    do_fio(&c__9, text, 80L);
    e_rsfe();
    s_wsfe(&io___464);
    do_fio(&c__9, text, 80L);
    e_wsfe();
    s_wsfe(&io___465);
    e_wsfe();
    s_rsle(&io___466);
    do_lio(&c__3, &c__1, (char *)&r, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&s, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&op, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___470);
    do_lio(&c__9, &c__1, "     Enter output file name (<=15 characters):", 
	    46L);
    e_wsle();
    s_rsfe(&io___471);
    do_fio(&c__1, filename, 15L);
    e_rsfe();
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 15;
    o__1.ofnm = filename;
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_wsfe(&io___473);
    e_wsfe();
    s_rsle(&io___474);
    do_lio(&c__3, &c__1, (char *)&i, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&j, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&k, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&l, (ftnlen)sizeof(integer));
    e_rsle();
    s_wsle(&io___478);
    do_lio(&c__9, &c__1, "    Please wait................", 31L);
    e_wsle();
/*              do 90 ijk=1,i */
/* 90            jjn=irand(1) */
    for (ii = 1; ii <= 97; ++ii) {
	js = (float)0.;
	for (jj = 1; jj <= 32; ++jj) {
	    m = i * j % 179 * k % 179;
	    i = j;
	    j = k;
	    k = m;
	    l = (l * 53 + 1) % 169;
	    js <<= 1;
	    if (l * m % 64 >= 32) {
		++js;
	    }
/* L93: */
	}
	if (op == 3) {
	    js ^= 1;
	}
/* L92: */
	ju[ii - 1] = js;
    }
    ip = r;
    jp = s;
    jk = 0;
    for (i = 1; i <= 700; ++i) {
	++jk;
	for (j = 1; j <= 4096; ++j) {
	    if (op == 1) {
		juni = ju[ip - 1] + ju[jp - 1];
	    } else if (op == 2) {
		juni = ju[ip - 1] - ju[jp - 1];
	    } else if (op == 3) {
		juni = ju[ip - 1] * ju[jp - 1];
	    } else {
		juni = ju[ip - 1] ^ ju[jp - 1];
	    }
	    ju[ip - 1] = juni;
	    --ip;
	    if (ip == 0) {
		ip = 97;
	    }
	    --jp;
	    if (jp == 0) {
		jp = 97;
	    }
/* L3: */
	    bb[j - 1] = juni;
	}
/* L2: */
	io___489.cirec = jk;
	s_wdue(&io___489);
	do_uio(&c__4096, (char *)&bb[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    period = (pow_di(&c_b546, &r) - 1) * 4294967296.;
    if (op == 3) {
	period *= (float).25;
    }
    if (op == 4) {
	period = pow_di(&c_b546, &r) - 1;
    }
    s_wsle(&io___491);
    do_lio(&c__9, &c__1, "     ", 5L);
    e_wsle();
    s_wsle(&io___492);
    do_lio(&c__9, &c__1, "     FINISHED", 13L);
    e_wsle();
    s_wsfe(&io___493);
    do_fio(&c__1, filename, 15L);
    e_wsfe();
    if (op == 1) {
	s_wsle(&io___494);
	do_lio(&c__9, &c__1, "++++++++++++++++++++++++++++++++++++++++++++++\
+++++++++", 55L);
	e_wsle();
	s_wsfe(&io___495);
	do_fio(&c__1, (char *)&r, (ftnlen)sizeof(integer));
	do_fio(&c__1, (char *)&s, (ftnlen)sizeof(integer));
	e_wsfe();
    } else if (op == 2) {
	s_wsfe(&io___496);
	do_fio(&c__1, (char *)&r, (ftnlen)sizeof(integer));
	do_fio(&c__1, (char *)&s, (ftnlen)sizeof(integer));
	e_wsfe();
    } else if (op == 3) {
	s_wsfe(&io___497);
	do_fio(&c__1, (char *)&r, (ftnlen)sizeof(integer));
	do_fio(&c__1, (char *)&s, (ftnlen)sizeof(integer));
	e_wsfe();
    } else {
	s_wsfe(&io___498);
	do_fio(&c__1, (char *)&r, (ftnlen)sizeof(integer));
	do_fio(&c__1, (char *)&s, (ftnlen)sizeof(integer));
	e_wsfe();
    }
    s_wsfe(&io___499);
    e_wsfe();
    s_wsle(&io___500);
    do_lio(&c__9, &c__1, "     ", 5L);
    do_lio(&c__5, &c__1, (char *)&period, (ftnlen)sizeof(doublereal));
    e_wsle();
    return 0;
} /* makefibo_ */

/* Subroutine */ int prod_(x, y, z)
integer *x, *y, *z;
{
    static integer d, r[4], s[4];

    /* Parameter adjustments */
    --z;
    --y;
    --x;

    /* Function Body */
    d = x[1] * y[1];
    z[1] = d & 65535;
    d = (d >> 16) + x[1] * y[2];
    r[1] = d & 65535;
    r[2] = d >> 16;
    d = x[2] * y[1];
    s[1] = d & 65535;
    d = (d >> 16) + x[2] * y[2];
    s[2] = d & 65535;
    s[3] = d >> 16;
    d = r[1] + s[1];
    z[2] = d & 65535;
    d = (d >> 16) + r[2] + s[2];
    z[3] = d & 65535;
    z[4] = (d >> 16) + s[3];
    return 0;
} /* prod_ */

/* Subroutine */ int sum_(x, y, z)
integer *x, *y, *z;
{
    static integer d;

    /* Parameter adjustments */
    --z;
    --y;
    --x;

    /* Function Body */
    d = x[1] + y[1];
    z[1] = d & 65535;
    d = (d >> 16) + x[2] + y[2];
    z[2] = d & 65535;
    d = (d >> 16) + x[3] + y[3];
    z[3] = d & 65535;
    d = (d >> 16) + x[4] + y[4];
    z[4] = d & 65535;
    return 0;
} /* sum_ */

/* Subroutine */ int makeinvc_()
{
    /* Initialized data */

    static integer a = 69069;
    static integer b = 362436069;
    static doublereal dz = 123456789.;

    /* Format strings */
    static char fmt_845[] = "(a78)";
    static char fmt_471[] = "(\002 The file invcong.32 now contains 11,428,8\
00 bytes of 32-bit\002,/,\002 integers from the inverse congruential generat\
or.\002)";

    /* System generated locals */
    doublereal d__1;
    olist o__1;

    /* Builtin functions */
    integer f_open(), s_rsfe(), do_fio(), e_rsfe(), s_wsfe(), e_wsfe(), 
	    s_wsle(), do_lio(), e_wsle(), s_rsle(), e_rsle();
    double d_mod();
    integer s_wdue(), do_uio(), e_wdue();

    /* Local variables */
    static char text[80*15];
    static integer i, j, n[4096], icong;
    static doublereal a0, b0, b1, b2, a1, a2;
    static integer ij, jk;
    static char dum[80];

    /* Fortran I/O blocks */
    static cilist io___509 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___512 = { 0, 4, 0, fmt_845, 0 };
    static cilist io___514 = { 0, 6, 0, fmt_845, 0 };
    static cilist io___515 = { 0, 6, 0, 0, 0 };
    static cilist io___516 = { 0, 5, 0, 0, 0 };
    static cilist io___517 = { 0, 6, 0, 0, 0 };
    static cilist io___518 = { 0, 6, 0, 0, 0 };
    static cilist io___529 = { 0, 1, 0, 0, 0 };
    static cilist io___530 = { 0, 6, 0, fmt_471, 0 };


    b0 = 4294967296.;
    o__1.oerr = 0;
    o__1.ounit = 1;
    o__1.ofnmlen = 10;
    o__1.ofnm = "invcong.32";
    o__1.orl = 16384;
    o__1.osta = 0;
    o__1.oacc = "direct";
    o__1.ofm = "unformatted";
    o__1.oblnk = 0;
    f_open(&o__1);
    s_rsfe(&io___509);
    for (j = 1; j <= 266; ++j) {
	do_fio(&c__1, dum, 80L);
    }
    e_rsfe();
    s_rsfe(&io___512);
    do_fio(&c__15, text, 80L);
    e_rsfe();
    s_wsfe(&io___514);
    do_fio(&c__15, text, 80L);
    e_wsfe();
    s_wsle(&io___515);
    do_lio(&c__9, &c__1, "  Enter a and b and seed integer, free format:", 
	    46L);
    e_wsle();
    s_rsle(&io___516);
    do_lio(&c__3, &c__1, (char *)&a, (ftnlen)sizeof(integer));
    do_lio(&c__3, &c__1, (char *)&b, (ftnlen)sizeof(integer));
    do_lio(&c__5, &c__1, (char *)&dz, (ftnlen)sizeof(doublereal));
    e_rsle();
    s_wsle(&io___517);
    do_lio(&c__9, &c__1, "    This may take a long time, as this is a very", 
	    48L);
    e_wsle();
    s_wsle(&io___518);
    do_lio(&c__9, &c__1, "    very slow generator.  Please wait ...........", 
	    49L);
    e_wsle();
    jk = 0;
    for (ij = 1; ij <= 700; ++ij) {
	++jk;
	for (i = 1; i <= 4096; ++i) {
	    b1 = dz;
	    a0 = 0.;
	    a1 = 1.;
	    b0 = 4294967296.;
	    while(b1 > 0.) {
		b2 = d_mod(&b0, &b1);
		a2 = a0 - a1 * ((b0 - b2) / b1);
		b0 = b1;
		b1 = b2;
		a0 = a1;
		a1 = a2;
	    }
	    d__1 = a * b0 * a0 + b;
	    dz = d_mod(&d__1, &c_b842);
	    if (dz < 0.) {
		dz += 4294967296.;
	    }
	    if (dz > 2147483648.) {
		icong = (integer) (dz - 4294967296.);
	    } else {
		icong = (integer) dz;
	    }
/* L2: */
	    n[i - 1] = icong;
	}
/* L3: */
	io___529.cirec = jk;
	s_wdue(&io___529);
	do_uio(&c__4096, (char *)&n[0], (ftnlen)sizeof(integer));
	e_wdue();
    }
    s_wsfe(&io___530);
    e_wsfe();
} /* makeinvc_ */

/* Subroutine */ int asort_(list, n)
real *list;
integer *n;
{
    static integer i, j, k, l, m;
    static real t;
    static integer ij, il[33], iu[33];
    static real tt;

    /* Parameter adjustments */
    --list;

    /* Function Body */
    m = 1;
    i = 1;
    j = *n;
L5:
    if (i >= j) {
	goto L70;
    }
L10:
    k = i;
    ij = (i + j) / 2;
    t = list[ij];
    if (list[i] <= t) {
	goto L20;
    }
    list[ij] = list[i];
    list[i] = t;
    t = list[ij];
L20:
    l = j;
    if (list[j] >= t) {
	goto L40;
    }
    list[ij] = list[j];
    list[j] = t;
    t = list[ij];
    if (list[i] <= t) {
	goto L40;
    }
    list[ij] = list[i];
    list[i] = t;
    t = list[ij];
    goto L40;
L30:
    list[l] = list[k];
    list[k] = tt;
L40:
    --l;
    if (list[l] > t) {
	goto L40;
    }
    tt = list[l];
L50:
    ++k;
    if (list[k] < t) {
	goto L50;
    }
    if (k <= l) {
	goto L30;
    }
    if (l - i <= j - k) {
	goto L60;
    }
    il[m - 1] = i;
    iu[m - 1] = l;
    i = k;
    ++m;
    goto L80;
L60:
    il[m - 1] = k;
    iu[m - 1] = j;
    j = l;
    ++m;
    goto L80;
L70:
    --m;
    if (m <= 0) {
	return 0;
    }
    i = il[m - 1];
    j = iu[m - 1];
L80:
    if (j - i >= 11) {
	goto L10;
    }
    if (i == 1) {
	goto L5;
    }
    --i;
L90:
    ++i;
    if (i == j) {
	goto L70;
    }
    t = list[i + 1];
    if (list[i] <= t) {
	goto L90;
    }
    k = i;
L100:
    list[k + 1] = list[k];
    --k;
    if (t < list[k]) {
	goto L100;
    }
    list[k + 1] = t;
    goto L90;
} /* asort_ */

/* Subroutine */ int kstest_(y, n, p)
real *y;
integer *n;
real *p;
{
    /* Initialized data */

    static integer l[80]	/* was [8][10] */ = { 40,46,37,34,27,24,20,20,
	    88,59,43,37,29,27,20,22,92,63,48,41,30,30,25,24,82,59,42,37,26,28,
	    26,22,62,48,33,30,23,23,22,18,49,34,22,20,16,17,17,12,17,17,7,8,4,
	    7,5,1,40,18,19,14,16,13,10,9,59,20,10,4,1,1,0,-1,41,43,36,112,15,
	    95,32,58 };

    /* System generated locals */
    integer i__1;

    /* Builtin functions */
    double log(), exp(), sqrt();

    /* Local variables */
    static real a, e;
    static integer i, j, m;
    static real t, z;
    extern /* Subroutine */ int asort_();
    extern doublereal sp_();

/*      TO TEST WHETHER A SET OF N REAL NUMBERS IS DRAWN */
/*      FROM A UNIFORM DISTRIBUTION (KOLMOROGOV-SMIRNOV METHOD) */
/*      THE TEST IS BASED ON THE DISTANCE BETWEEN THE EMPIRICAL */
/*      AND THEORETICAL DISTRIBUTION FUNCTIONS */
/*       USAGE: CALL KSTEST(Y,N,P) */
/*      Y ...   ARRAY OF REAL NUMBERS HYPOTHETICALLY DRAWN */
/*              FROM A UNIFORM DISTRIBUTION ON (0,1) */
/*      N ...   NUMBER OF ELEMENTS IN 'Y' */
/*      P IS THE PROBABILITY ASSOCIATED WITH THE OBSERVED VALUE */
/*      OF THE ANDERSON-DARLING STATISTIC: N TIMES THE INTEGRAL */
/*      OF (FN(X)-X)**2/(X*(1-X)) */
    /* Parameter adjustments */
    --y;

    /* Function Body */
    asort_(&y[1], n);
    z = -(*n) * (*n + (float)0.);
    i__1 = *n;
    for (i = 1; i <= i__1; ++i) {
	t = y[i] * ((float)1. - y[*n + 1 - i]);
	if (t < (float)1e-20) {
	    t = (float)1e-20;
	}
/* L2: */
	z -= (i + i - 1) * log(t);
    }
    z /= *n;
    *p = (float)0.;
    if (z < (float).01) {
	goto L5;
    }
    if (z > (float)2.) {
	goto L3;
    }
    *p = exp((float)-1.2337 / z) * (float)2. * (z / (float)8. + (float)1. - z 
	    * (float).04958 * z / (z + (float)1.325)) / sqrt(z);
    goto L5;
L3:
    if (z > (float)4.) {
	goto L4;
    }
    *p = (float)1. - exp(z * (float)-1.091638) * (float).6621361 - exp(z * (
	    float)-2.005138) * (float).95059;
    goto L5;
L4:
    *p = (float)1. - exp(z * (float)-1.050321) * (float).4938691 - exp(z * (
	    float)-1.527198) * (float).5946335;
L5:
/* Computing MIN */
    i__1 = *n - 2;
    m = min(i__1,8);
    e = (float)0.;
    for (j = 1; j <= 10; ++j) {
/* L6: */
	e += l[m + (j << 3) - 9] * sp_(p, &j) * (float)1e-4;
    }
    if (*n > 10) {
	e = e * (float)10. / *n;
    }
    a = *p + e;
    return 0;
} /* kstest_ */

doublereal sp_(x, i)
real *x;
integer *i;
{
    /* System generated locals */
    real ret_val, r__1;

    /* Local variables */
    static real t;

    ret_val = (float)0.;
    switch ((int)*i) {
	case 1:  goto L7;
	case 2:  goto L7;
	case 3:  goto L7;
	case 4:  goto L7;
	case 5:  goto L7;
	case 6:  goto L7;
	case 7:  goto L7;
	case 8:  goto L8;
	case 9:  goto L9;
	case 10:  goto L10;
    }
L7:
    t = (r__1 = *x * (float)10. - (float).5 - *i, dabs(r__1));
    if (t > (float)1.5) {
	return ret_val;
    }
    if (t <= (float).5) {
	ret_val = (float)1.5 - t * (float)2. * t;
    } else {
	ret_val = (float)2.25 - t * ((float)3. - t);
    }
    return ret_val;
L8:
    if (*x <= (float).8 || *x >= (float)1.) {
	return ret_val;
    }
/* Computing 2nd power */
    r__1 = *x - (float).9;
    ret_val = r__1 * r__1 * (float)100. - (float)1.;
    return ret_val;
L9:
    if (*x <= (float)0. || *x >= (float).05) {
	return ret_val;
    }
    if (*x <= (float).01) {
	ret_val = *x * (float)-100.;
    } else {
	ret_val = (*x - (float).05) * (float)25.;
    }
    return ret_val;
L10:
    if (*x <= (float).98 || *x >= (float)1.) {
	return ret_val;
    }
    ret_val = (float).1 - (r__1 = *x - (float).99, dabs(r__1)) * (float)10.;
    return ret_val;
} /* sp_ */

/* Subroutine */ int plot1_0_(n__, x, y, n, nc, z)
int n__;
real *x, *y;
integer *n, *nc;
real *z;
{
    /* Initialized data */

    static struct {
	char e_1[4860];
	} equiv_1 = { {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
		' '} };


    /* Format strings */
    static char fmt_22[] = "(\002   X RANGE:\002,g12.3,\002 TO \002,g12.3\
,\002  Y,Z RANGE:\002,g12.3,\002  TO \002,g12.3)";
    static char fmt_21[] = "(10x,90a1)";

    /* System generated locals */
    integer i__1;
    real r__1, r__2;
    static char equiv_0[4860];

    /* Builtin functions */
    integer s_wsfe(), do_fio(), e_wsfe();
    /* Subroutine */ int s_copy();

    /* Local variables */
#define c_ (equiv_0)
#define d_ (equiv_0)
#define e ((char *)&equiv_1)
#define f ((char *)&equiv_1)
    static integer i, j, k, m;
    static logical p2;
    static real yb, xd, yd;
    static integer nr;
    static real xl, xr, yt;

    /* Fortran I/O blocks */
    static cilist io___561 = { 0, 6, 0, fmt_22, 0 };
    static cilist io___567 = { 0, 6, 0, fmt_21, 0 };


    /* Parameter adjustments */
    --x;
    --y;
    if (z) {
	--z;
	}

    /* Function Body */
    switch(n__) {
	case 1: goto L_plot2;
	}

    p2 = FALSE_;
    goto L1;

L_plot2:
    p2 = TRUE_;
L1:
    nr = *nc * 48 / 100;
    if (*nc > 60) {
	nr = *nc * 6 / 10;
    }
    xl = x[1];
    xr = xl;
    yb = y[1];
    yt = yb;
    i__1 = *n;
    for (i = 1; i <= i__1; ++i) {
/* Computing MIN */
	r__1 = xl, r__2 = x[i];
	xl = dmin(r__1,r__2);
/* Computing MAX */
	r__1 = xr, r__2 = x[i];
	xr = dmax(r__1,r__2);
	if (p2) {
/* Computing MIN */
	    r__1 = yb, r__2 = z[i];
	    yb = dmin(r__1,r__2);
	}
	if (p2) {
/* Computing MAX */
	    r__1 = yt, r__2 = z[i];
	    yt = dmax(r__1,r__2);
	}
/* Computing MIN */
	r__1 = yb, r__2 = y[i];
	yb = dmin(r__1,r__2);
/* L2: */
/* Computing MAX */
	r__1 = yt, r__2 = y[i];
	yt = dmax(r__1,r__2);
    }
    s_wsfe(&io___561);
    do_fio(&c__1, (char *)&xl, (ftnlen)sizeof(real));
    do_fio(&c__1, (char *)&xr, (ftnlen)sizeof(real));
    do_fio(&c__1, (char *)&yb, (ftnlen)sizeof(real));
    do_fio(&c__1, (char *)&yt, (ftnlen)sizeof(real));
    e_wsfe();
    xd = (float)1.;
    if (xl != xr) {
	xd = *nc / (xr - xl);
    }
    yd = (float)1.;
    if (yb != yt) {
	yd = nr / (yt - yb);
    }
    s_copy(d_, e, 4860L, 4860L);
    i__1 = *n;
    for (m = 1; m <= i__1; ++m) {
	i = (x[m] - xl) * xd + (float)1.;
	j = (y[m] - yb) * yd + (float)1.;
	*(unsigned char *)&c_[i + j * 90 - 91] = '*';
	if (! p2) {
	    goto L4;
	}
	k = (z[m] - yb) * yd + (float)1.;
	*(unsigned char *)&c_[i + k * 90 - 91] = '+';
	if (j == k) {
	    *(unsigned char *)&c_[i + k * 90 - 91] = '0';
	}
L4:
	;
    }
    for (j = nr; j >= 1; --j) {
/* L5: */
	s_wsfe(&io___567);
	i__1 = *nc;
	for (i = 1; i <= i__1; ++i) {
	    do_fio(&c__1, c_ + (i + j * 90 - 91), 1L);
	}
	e_wsfe();
    }
    return 0;
} /* plot1_ */

#undef f
#undef e
#undef d_
#undef c_


/* Subroutine */ int plot1_(x, y, n, nc)
real *x, *y;
integer *n, *nc;
{
    return plot1_0_(0, x, y, n, nc, (real *)0);
    }

/* Subroutine */ int plot2_(x, y, z, n, nc)
real *x, *y, *z;
integer *n, *nc;
{
    return plot1_0_(1, x, y, n, nc, z);
    }