프로그래밍에서 흔한 실수 중 하나는 초기화하지 않은 변수를 사용하는 것이다. 예를 들어 C와 C++에서는 선언 직후의 모든 변수가 부정(不定)한 값을 가지며 어떤 값이든 될 수 있다. 따라서 다음 프로그램은
main()
{
int x;
printf("%d\n", x);
}
어떤 수든 출력할 수 있다. 하지만 모든 값이 0으로 초기화되는 Pascal 같은 언어에서도, 코드 조각이 다른 문맥에 놓였을 때의 부작용을 피하려면 변수를 사용하기 전에 확정된 값을 주는 것이 좋다.
일반적으로 주어진 프로그램에서 모든 변수가 읽히기 전에 값을 대입받았는지 판정하는 문제는 결정 불가능(undecidable)하다. 그러나 이 문제처럼 대입문의 나열만 고려하면 문제는 풀 수 있게 된다.
입력은 여러 개의 프로그램 조각으로 이루어진다. 각 조각은 그 조각의 줄 수를 나타내는 정수 $n$이 한 줄에 단독으로 적힌 것으로 시작한다. 이어지는 $n$개의 줄에는 각각 "variable1 = variable2" 형태의 대입문이 들어 있으며, 각 변수는 소문자 알파벳 한 글자이다.
입력은 $n = 0$인 조각으로 끝난다.
프로그램 조각을 실행하기 전에는 변수 a가 확정된 값을 가지고, 나머지 변수는 모두 미정(undefined)이라고 가정한다. 대입문 "variable1 = variable2"는 variable2가 그 시점에 확정된 값을 가질 때에만 variable1을 확정 상태로 만든다(그렇지 않으면 variable1은 미정이 된다). 각 프로그램 조각을 실행한 뒤 확정된 값을 가지는 변수의 이름을 출력하라.
각 프로그램 조각마다 먼저 "Program #k" 줄을 출력한다(k는 1부터 시작하는 프로그램 번호). 그다음 줄에 확정된 값을 가지는 변수 이름을 사전순으로 정렬해 출력하고, 각 변수 이름 뒤에 공백 하나를 붙인다. 확정된 값을 가지는 변수가 하나도 없으면 "none"을 출력한다.
연속한 두 프로그램 조각의 출력 사이에는 빈 줄을 하나 넣는다.