#include <stdio.h>
#include <stdlib.h>
#define N 100
#define ARRAY_MAX 26
typedef struct tag_data {
int array[ARRAY_MAX];
int n;
struct tag_data * next;
} DATA;
DATA data[N] = {{{0}}};
void init()
{
int i, j;
for (i=0; i<N; i++)
for (j=0; j<ARRAY_MAX; j++)
data[i].array[j] = j;
for (i=0; i<N-1; i++)
data[i].next = &data[i + 1];
data[i].next = NULL;
}
void roll(int * array)
{
int i, k;
for (i=0; i<ARRAY_MAX-1; i++) {
k = array[i];
array[i] = array[i + 1];
array[i + 1] = k;
}
}
void encode(int * value, DATA * temp)
{
DATA * node;
if (temp == NULL)
return;
for (node = temp; node != NULL; node = node->next)
*value ^= node->array[0];
temp->n++;
roll (temp->array);
if (temp->n == ARRAY_MAX) {
temp->n = 0;
encode (value, temp->next);
}
return;
}
int main(int argc, char *argv[])
{
int value = 123;
init();
while (data[N-1].n != ARRAY_MAX-1)
encode (&value, &data[0]);
printf("%d\n", value);
return 0;
}