6{
7 char str[
MC], strE[
MC], strD[
MC], aux[
MC];
8 int i, nc, a, ai, b, n;
9 a = 17;
10
11 b = 21;
12 n = 52;
13 i=0;
14 do{
15 str[i++] = getc(stdin);
16 }while(str[i-1]!=10);
17 str[i-1] = '\0';
18 nc = i-1;
19 printf("MSG: %s\n", str);
20 for(i=0; i<nc; i++)
21 printf("%d ", str[i]);
22 printf("\n");
23 for(i=0; i<nc; i++)
24 {
25 aux[i] = str[i]-'A'-6*(str[i]>='a');
26 printf("%d ", aux[i]);
27 }
28 printf("\n");
29 for(i=0; i<nc; i++)
30 {
31 aux[i] = (a*((int)aux[i])+b)%n;
32 printf("%d ", aux[i]);
33 }
34 printf("\n");
35 for(i=0; i<nc; i++)
36 strE[i] = aux[i]+'A'+6*(aux[i]>(n/2-1));
37 strE[nc]='\0';
38 printf("%s\n", strE);
39 for(i=0; i<nc; i++)
40 {
41 aux[i] = strE[i]-'A'-6*(strE[i]>='a');
42 printf("%d ", aux[i]);
43 }
44 printf("\n");
45 ai=1;
46 while(((ai*a)%n)!=1)
47 ai++;
48 printf("ai = %d\n", ai);
49 for(i=0; i<nc; i++)
50 {
51 aux[i] = (ai*((aux[i]<b)*n+aux[i]-b))%n;
52 printf("%d ", aux[i]);
53 }
54 printf("\n");
55 for(i=0; i<nc; i++)
56 {
57 strD[i] = aux[i]+'A'+6*(aux[i]>25);
58 printf("%d ", strD[i]);
59 }
60 strD[nc] = '\0';
61 printf("\n");
62 printf("%s\n", strD);
63 return 0;
64}