#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef
struct
table {
int
state;
int
output;
} table;
int
main()
{
char
present_state, temp;
int
ps, temp2;
int
hash;
scanf
(
"%d"
, &ps);
table arr[2];
for
(
int
i = 0; i < ps; i++) {
char
present_state =
'A'
+ i;
scanf
(
"%*c%c%d"
, &temp, &arr[i][0].output);
arr[i][0].state = (
int
)temp - 65;
scanf
(
"%*c%c%d"
, &temp, &arr[i][1].output);
arr[i][1].state = (
int
)temp - 65;
}
for
(
int
j = 0; j < ps; j++) {
char
present_state =
'A'
+ j;
printf
(
"%c %c, %d %c, %d\n"
, present_state, (
char
)(arr[j][0].state + 65), arr[j][0].output,
(
char
)(arr[j][1].state + 65), arr[j][1].output);
}
int
prev_result;
int
new_result;
for
(
int
i = 0; i < ps; i++) {
prev_result[i] = (2 * arr[i][0].output + arr[i][1].output);
}
for
(
int
j = 0; j < 100; j++) {
for
(
int
i = 0; i < ps; i++)
new_result[i] = prev_result[i];
for
(
int
i = 0; i < ps; i++)
hash[i] = 0;
int
op = 100;
printf
(
"P%d="
, j + 1);
for
(
int
i = 0; i < ps; i++) {
if
(hash[i] == 0) {
hash[i] = 1;
printf
(
"("
);
for
(
int
j = i; j < ps; j++) {
if
(prev_result[i] == prev_result[j]) {
printf
(
"%c"
, j + 65);
new_result[j] = new_result[j] * op;
new_result[j] += (prev_result[arr[j][0].state] * 2 + prev_result[arr[j][1].state]);
hash[j] = 1;
}
}
printf
(
") "
);
op += 100;
}
}
printf
(
"\n"
);
int
flag = -1;
for
(
int
x = 0; x < ps - 1; x++) {
for
(
int
y = x + 1; y < ps; y++) {
if
(prev_result[x] == prev_result[y]) {
if
(new_result[x] != new_result[y]) {
flag = 0;
break
;
}
}
}
if
(flag == 0)
break
;
}
int
ij = 1;
for
(
int
i = 0; i < ps; i++) {
hash[i] = 0;
}
for
(
int
i = 0; i < ps; i++) {
if
(hash[i] == 0) {
hash[i] = 1;
for
(
int
j = i; j < ps; j++) {
if
(new_result[i] == new_result[j]) {
prev_result[j] = ij;
hash[j] = 1;
}
}
ij++;
}
}
if
(flag != 0)
break
;
}
int
ij = 1, s;
for
(
int
i = 0; i < ps; i++) {
hash[i] = 0;
}
for
(
int
i = 0; i < ps; i++) {
if
(hash[i] == 0) {
printf
(
"S%d=("
, ij);
hash[i] = 1;
for
(
int
j = i; j < ps; j++) {
if
(prev_result[i] == prev_result[j]) {
hash[j] = 1;
printf
(
"%c"
, j + 65);
}
}
printf
(
") "
);
s[ij] = i;
ij++;
}
}
printf
(
"\n"
);
for
(
int
j = 1; j < ij; j++) {
int
present_state = j;
printf
(
"S%d S%d, %d S%d, %d\n"
, present_state, (prev_result[arr[s[j]][0].state]),
arr[s[j]][0].output,
(prev_result[arr[s[j]][1].state]),
arr[s[j]][1].output);
}
return
0;
}