#include #include #include static struct Node { char name[4]; size_t parent; } tree[2048]; static size_t node(const char *name) { size_t i; for (i = 0; tree[i].name[0]; ++i) { if (strcmp(name, tree[i].name)) continue; return i; } strncpy(tree[i].name, name, sizeof(tree[i].name)); return i; } static size_t ancestors(size_t i) { size_t n = 0; while (i) { i = tree[i].parent; n++; } return n; } int main(void) { node("COM"); char parent[4], child[4]; while (EOF != scanf("%3s)%3s\n", parent, child)) { tree[node(child)].parent = node(parent); } size_t orbits = 0; for (size_t i = 0; tree[i].name[0]; ++i) { orbits += ancestors(i); } printf("%zu\n", orbits); size_t you[2048]; size_t ylen = 0; for (size_t i = node("YOU"); i; i = tree[i].parent) { you[ylen++] = i; } size_t san[2048]; size_t slen = 0; for (size_t i = node("SAN"); i; i = tree[i].parent) { san[slen++] = i; } for (size_t y = 0; y < ylen; ++y) { for (size_t s = 0; s < slen; ++s) { if (you[y] == san[s]) { printf("%zu\n", y + s - 2); return 0; } } } }