시간 제한메모리 제한제출정답맞힌 사람정답 비율
10 초 128 MB911100.000%

문제

다음과 같은 세 가지 명령(statement)이 있는 아주 간단한 프로그래밍 언어가 있다.

  • if <boolean expression> then <statement list> fi
  • if <boolean expression> then <statement list> else <statement list> fi 
  • checkpoint

모든 키워드는 소문자로 작성해야 한다. <statement list>는 하나 또는 그 이상의 명령을 나열한 것이며, 전체 프로그램은 하나의 <statement list> 이다.

<boolean expression>은 다음과 같이 이루어져 있다.

  • 변수: 알파벳 대문자 하나
  • 연산자: unary ~ (NOT), binary & (AND), binary | (OR)
    • 우선순위: ~ > & > |
  • 괄호
  • 공백 없음
  • <BE> -> ~<BE> or <BE>&<BE> or <BE>|<BE> or (<BE>) or [A-Z]

이 언어로 이루어진 문법에 오류가 없는 프로그램이 주어졌을 때, 각 checkpoint에 도달하려면 각 변수가 어떤 값을 가져야 하는지 구하는 프로그램을 작성하시오.

입력

문법에 오류가 없는 프로그램 하나가 입력으로 주어진다. 키워드는 항상 소문자로 작성되어져 있고, 모든 불리언 변수는 알파벳 대문자 하나로 작성되어져 있다. 키워드의 구분은 공백(스페이스, 탭, 줄바꿈)으로 한다. Expression에는 공백이 포함되어져 있지 않으며, 각 <statement list>는 적어도 한 개의 statement를 포함한다. 입력으로 주어지는 프로그램은 최대 20개의 변수가 등장하며, statement를 5000개 이상 포함하지 않는다. 모든 boolean expression은 128글자를 넘지 않는다.

출력

각각의 checkpoint가 등장하는 순서대로 '>' 를 출력하고, 그곳에 도달하려면 변수가 어떤 값을 가져야하는지 출력한다. 불가능한 경우에는 'unreachable'을 출력한다.

도달할 수 있는 경우에, 반드시 true이어야 하는 변수는 대문자로, false이어야 하는 변수는 소문자로 출력한다. 변수는 알파벳 순서대로 출력한다.

예제 입력 1

if A then
    checkpoint
    if ~A then
        checkpoint
    fi
else
    checkpoint
fi
if (A&B)|(~A&~B) then
    checkpoint 
fi
if A|~A then checkpoint fi
if B then
    if ~A then checkpoint fi
fi

예제 출력 1

>A
>unreachable
>a
>
>
>aB
W3sicHJvYmxlbV9pZCI6IjcxNTciLCJwcm9ibGVtX2xhbmciOiIwIiwidGl0bGUiOiJcdWM4NzBcdWFjNzRcdWJiMzgiLCJkZXNjcmlwdGlvbiI6IjxwPlx1YjJlNFx1Yzc0Y1x1YWNmYyBcdWFjMTlcdWM3NDAgXHVjMTM4IFx1YWMwMFx1YzljMCBcdWJhODVcdWI4Mzkoc3RhdGVtZW50KVx1Yzc3NCBcdWM3ODhcdWIyOTQgXHVjNTQ0XHVjOGZjIFx1YWMwNFx1YjJlOFx1ZDU1YyBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3OThcdWJjMGQgXHVjNWI4XHVjNWI0XHVhYzAwIFx1Yzc4OFx1YjJlNC48XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5pZiAmbHQ7Ym9vbGVhbiBleHByZXNzaW9uJmd0OyB0aGVuICZsdDtzdGF0ZW1lbnQgbGlzdCZndDsgZmk8XC9saT5cclxuXHQ8bGk+aWYgJmx0O2Jvb2xlYW4gZXhwcmVzc2lvbiZndDsgdGhlbiAmbHQ7c3RhdGVtZW50IGxpc3QmZ3Q7IGVsc2UgJmx0O3N0YXRlbWVudCBsaXN0Jmd0OyBmaSZuYnNwOzxcL2xpPlxyXG5cdDxsaT5jaGVja3BvaW50PFwvbGk+XHJcbjxcL3VsPlxyXG5cclxuPHA+XHViYWE4XHViNGUwIFx1ZDBhNFx1YzZjY1x1YjRkY1x1YjI5NCBcdWMxOGNcdWJiMzhcdWM3OTBcdWI4NWMgXHVjNzkxXHVjMTMxXHVkNTc0XHVjNTdjIFx1ZDU1Y1x1YjJlNC4gJmx0O3N0YXRlbWVudCBsaXN0Jmd0O1x1YjI5NCBcdWQ1NThcdWIwOTggXHViNjEwXHViMjk0IFx1YWRmOCBcdWM3NzRcdWMwYzFcdWM3NTggXHViYTg1XHViODM5XHVjNzQ0IFx1YjA5OFx1YzVmNFx1ZDU1YyBcdWFjODNcdWM3NzRcdWJhNzAsIFx1YzgwNFx1Y2NiNCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDAgXHVkNTU4XHViMDk4XHVjNzU4ICZsdDtzdGF0ZW1lbnQgbGlzdCZndDsgXHVjNzc0XHViMmU0LjxcL3A+XHJcblxyXG48cD4mbHQ7Ym9vbGVhbiBleHByZXNzaW9uJmd0O1x1Yzc0MCBcdWIyZTRcdWM3NGNcdWFjZmMgXHVhYzE5XHVjNzc0IFx1Yzc3NFx1YjhlOFx1YzViNFx1YzgzOCBcdWM3ODhcdWIyZTQuPFwvcD5cclxuXHJcbjx1bD5cclxuXHQ8bGk+XHViY2MwXHVjMjE4OiBcdWM1NGNcdWQzMGNcdWJjYjMgXHViMzAwXHViYjM4XHVjNzkwIFx1ZDU1OFx1YjA5ODxcL2xpPlxyXG5cdDxsaT5cdWM1ZjBcdWMwYjBcdWM3OTA6IHVuYXJ5IH4gKE5PVCksIGJpbmFyeSAmYW1wOyAoQU5EKSwgYmluYXJ5IHwgKE9SKVxyXG5cdDx1bD5cclxuXHRcdDxsaT5cdWM2YjBcdWMxMjBcdWMyMWNcdWM3MDQ6IH4gJmd0OyAmYW1wOyAmZ3Q7IHw8XC9saT5cclxuXHQ8XC91bD5cclxuXHQ8XC9saT5cclxuXHQ8bGk+XHVhZDA0XHVkNjM4PFwvbGk+XHJcblx0PGxpPlx1YWNmNVx1YmMzMSBcdWM1YzZcdWM3NGM8XC9saT5cclxuXHQ8bGk+Jmx0O0JFJmd0OyAtJmd0OyB+Jmx0O0JFJmd0OyBvciAmbHQ7QkUmZ3Q7JmFtcDsmbHQ7QkUmZ3Q7IG9yICZsdDtCRSZndDt8Jmx0O0JFJmd0OyBvciAoJmx0O0JFJmd0Oykgb3IgW0EtWl08XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5cdWM3NzQgXHVjNWI4XHVjNWI0XHViODVjIFx1Yzc3NFx1YjhlOFx1YzViNFx1YzljNCBcdWJiMzhcdWJjOTVcdWM1ZDAgXHVjNjI0XHViOTU4XHVhYzAwIFx1YzVjNlx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NzQgXHVjOGZjXHVjNWI0XHVjODRjXHVjNzQ0IFx1YjU0YywgXHVhYzAxIGNoZWNrcG9pbnRcdWM1ZDAgXHViM2M0XHViMmVjXHVkNTU4XHViODI0XHViYTc0IFx1YWMwMSBcdWJjYzBcdWMyMThcdWFjMDAgXHVjNWI0XHViNWE0IFx1YWMxMlx1Yzc0NCBcdWFjMDBcdWM4MzhcdWM1N2MgXHVkNTU4XHViMjk0XHVjOWMwIFx1YWQ2Y1x1ZDU1OFx1YjI5NCBcdWQ1MDRcdWI4NWNcdWFkZjhcdWI3YThcdWM3NDQgXHVjNzkxXHVjMTMxXHVkNTU4XHVjMmRjXHVjNjI0LjxcL3A+XHJcbiIsImlucHV0IjoiPHA+XHViYjM4XHViYzk1XHVjNWQwIFx1YzYyNFx1Yjk1OFx1YWMwMCBcdWM1YzZcdWIyOTQgXHVkNTA0XHViODVjXHVhZGY4XHViN2E4IFx1ZDU1OFx1YjA5OFx1YWMwMCBcdWM3ODVcdWI4MjVcdWM3M2NcdWI4NWMgXHVjOGZjXHVjNWI0XHVjOWM0XHViMmU0LiBcdWQwYTRcdWM2Y2NcdWI0ZGNcdWIyOTQgXHVkNTZkXHVjMGMxIFx1YzE4Y1x1YmIzOFx1Yzc5MFx1Yjg1YyBcdWM3OTFcdWMxMzFcdWI0MThcdWM1YjRcdWM4MzggXHVjNzg4XHVhY2UwLCBcdWJhYThcdWI0ZTAgXHViZDg4XHViOWFjXHVjNWI4IFx1YmNjMFx1YzIxOFx1YjI5NCBcdWM1NGNcdWQzMGNcdWJjYjMgXHViMzAwXHViYjM4XHVjNzkwIFx1ZDU1OFx1YjA5OFx1Yjg1YyBcdWM3OTFcdWMxMzFcdWI0MThcdWM1YjRcdWM4MzggXHVjNzg4XHViMmU0LiBcdWQwYTRcdWM2Y2NcdWI0ZGNcdWM3NTggXHVhZDZjXHViZDg0XHVjNzQwIFx1YWNmNVx1YmMzMShcdWMyYTRcdWQzOThcdWM3NzRcdWMyYTQsIFx1ZDBlZCwgXHVjOTA0XHViYzE0XHVhZmM4KVx1YzczY1x1Yjg1YyBcdWQ1NWNcdWIyZTQuIEV4cHJlc3Npb25cdWM1ZDBcdWIyOTQgXHVhY2Y1XHViYzMxXHVjNzc0IFx1ZDNlY1x1ZDU2OFx1YjQxOFx1YzViNFx1YzgzOCBcdWM3ODhcdWM5YzAgXHVjNTRhXHVjNzNjXHViYTcwLCBcdWFjMDEgJmx0O3N0YXRlbWVudCBsaXN0Jmd0O1x1YjI5NCBcdWM4MDFcdWM1YjRcdWIzYzQgXHVkNTVjIFx1YWMxY1x1Yzc1OCBzdGF0ZW1lbnRcdWI5N2MgXHVkM2VjXHVkNTY4XHVkNTVjXHViMmU0LiBcdWM3ODVcdWI4MjVcdWM3M2NcdWI4NWMgXHVjOGZjXHVjNWI0XHVjOWMwXHViMjk0IFx1ZDUwNFx1Yjg1Y1x1YWRmOFx1YjdhOFx1Yzc0MCBcdWNkNWNcdWIzMDAgMjBcdWFjMWNcdWM3NTggXHViY2MwXHVjMjE4XHVhYzAwIFx1YjRmMVx1YzdhNVx1ZDU1OFx1YmE3MCwgc3RhdGVtZW50XHViOTdjIDUwMDBcdWFjMWMgXHVjNzc0XHVjMGMxIFx1ZDNlY1x1ZDU2OFx1ZDU1OFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuIFx1YmFhOFx1YjRlMCBib29sZWFuIGV4cHJlc3Npb25cdWM3NDAgMTI4XHVhZTAwXHVjNzkwXHViOTdjIFx1YjExOFx1YzljMCBcdWM1NGFcdWIyOTRcdWIyZTQuPFwvcD5cclxuIiwib3V0cHV0IjoiPHA+XHVhYzAxXHVhYzAxXHVjNzU4IGNoZWNrcG9pbnRcdWFjMDAgXHViNGYxXHVjN2E1XHVkNTU4XHViMjk0IFx1YzIxY1x1YzExY1x1YjMwMFx1Yjg1YyAmIzM5OyZndDsmIzM5OyBcdWI5N2MgXHVjZDljXHViODI1XHVkNTU4XHVhY2UwLCBcdWFkZjhcdWFjZjNcdWM1ZDAgXHViM2M0XHViMmVjXHVkNTU4XHViODI0XHViYTc0IFx1YmNjMFx1YzIxOFx1YWMwMCBcdWM1YjRcdWI1YTQgXHVhYzEyXHVjNzQ0IFx1YWMwMFx1YzgzOFx1YzU3Y1x1ZDU1OFx1YjI5NFx1YzljMCBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuIFx1YmQ4OFx1YWMwMFx1YjJhNVx1ZDU1YyBcdWFjYmRcdWM2YjBcdWM1ZDBcdWIyOTQgJiMzOTt1bnJlYWNoYWJsZSYjMzk7XHVjNzQ0IFx1Y2Q5Y1x1YjgyNVx1ZDU1Y1x1YjJlNC48XC9wPlxyXG5cclxuPHA+XHViM2M0XHViMmVjXHVkNTYwIFx1YzIxOCBcdWM3ODhcdWIyOTQgXHVhY2JkXHVjNmIwXHVjNWQwLCBcdWJjMThcdWI0ZGNcdWMyZGMgdHJ1ZVx1Yzc3NFx1YzViNFx1YzU3YyBcdWQ1NThcdWIyOTQgXHViY2MwXHVjMjE4XHViMjk0IFx1YjMwMFx1YmIzOFx1Yzc5MFx1Yjg1YywgZmFsc2VcdWM3NzRcdWM1YjRcdWM1N2MgXHVkNTU4XHViMjk0IFx1YmNjMFx1YzIxOFx1YjI5NCBcdWMxOGNcdWJiMzhcdWM3OTBcdWI4NWMgXHVjZDljXHViODI1XHVkNTVjXHViMmU0LiBcdWJjYzBcdWMyMThcdWIyOTQgXHVjNTRjXHVkMzBjXHViY2IzIFx1YzIxY1x1YzExY1x1YjMwMFx1Yjg1YyBcdWNkOWNcdWI4MjVcdWQ1NWNcdWIyZTQuPFwvcD5cclxuIiwiaGludCI6IiIsIm9yaWdpbmFsIjoiMCIsImh0bWxfdGl0bGUiOiIwIiwicHJvYmxlbV9sYW5nX3Rjb2RlIjoiS29yZWFuIn0seyJwcm9ibGVtX2lkIjoiNzE1NyIsInByb2JsZW1fbGFuZyI6IjEiLCJ0aXRsZSI6IlNhdGlzZmFjdGlvbiBHdWFyYW50ZWVkIiwiZGVzY3JpcHRpb24iOiI8cD5Db25zaWRlciBhIHZlcnkgc2ltcGxlIHByb2dyYW1taW5nIGxhbmd1YWdlLCB3aXRoIG9ubHkgdGhyZWUgdHlwZXMgb2Ygc3RhdGVtZW50czombmJzcDs8XC9wPlxyXG5cclxuPHVsPlxyXG5cdDxsaT5pZiAmbHQ7Ym9vbGVhbiBleHByZXNzaW9uJmd0OyB0aGVuICZsdDtzdGF0ZW1lbnQgbGlzdCZndDsgZmkmbmJzcDs8XC9saT5cclxuXHQ8bGk+aWYgJmx0O2Jvb2xlYW4gZXhwcmVzc2lvbiZndDsgdGhlbiAmbHQ7c3RhdGVtZW50IGxpc3QmZ3Q7IGVsc2UgJmx0O3N0YXRlbWVudCBsaXN0Jmd0OyBmaSZuYnNwOzxcL2xpPlxyXG5cdDxsaT5jaGVja3BvaW50Jm5ic3A7PFwvbGk+XHJcbjxcL3VsPlxyXG5cclxuPHA+QWxsIGtleXdvcmRzIGFyZSByZXF1aXJlZCB0byBjb25zaXN0IG9mIGFsbCBsb3dlciBjYXNlIGxldHRlcnMuIEEgJmx0O3N0YXRlbWVudCBsaXN0Jmd0OyBpcyBvYnZpb3VzbHkganVzdCBhIGxpc3Qgb2Ygb25lIG9yIG1vcmUgc3RhdGVtZW50cywgYW5kIGFuIGVudGlyZSBwcm9ncmFtIGlzIGEgc2luZ2xlICZsdDtzdGF0ZW1lbnQgbGlzdCZndDsuJm5ic3A7PFwvcD5cclxuXHJcbjxwPkEgJmx0O2Jvb2xlYW4gZXhwcmVzc2lvbiZndDsgY29uc2lzdHMgb2Y6Jm5ic3A7PFwvcD5cclxuXHJcbjx1bD5cclxuXHQ8bGk+VmFyaWFibGVzOiBhIHNpbmdsZSBjYXBpdGFsIGxldHRlciZuYnNwOzxcL2xpPlxyXG5cdDxsaT5PcGVyYXRvcnM6IHVuYXJ5IH4gKE5PVCksIGJpbmFyeSAmYW1wOyAoQU5EKSwgYmluYXJ5IHwgKE9SKS4mbmJzcDtcclxuXHQ8dWw+XHJcblx0XHQ8bGk+UHJlY2VkZW5jZTogfiAmZ3Q7ICZhbXA7ICZndDsgfCZuYnNwOzxcL2xpPlxyXG5cdDxcL3VsPlxyXG5cdDxcL2xpPlxyXG5cdDxsaT5QYXJlbnRoZXNlcyZuYnNwOzxcL2xpPlxyXG5cdDxsaT5OTyBTcGFjZXMmbmJzcDs8XC9saT5cclxuXHQ8bGk+Jmx0O0JFJmd0OyAtJmd0OyB+Jmx0O0JFJmd0OyBvciAmbHQ7QkUmZ3Q7JmFtcDsmbHQ7QkUmZ3Q7IG9yICZsdDtCRSZndDt8Jmx0O0JFJmd0OyBvciAoJmx0O0JFJmd0Oykgb3IgW0EtWl0mbmJzcDs8XC9saT5cclxuPFwvdWw+XHJcblxyXG48cD5HaXZlbiBhIHN5bnRhY3RpY2FsbHkgY29ycmVjdCBwcm9ncmFtIGluIHRoaXMgc2ltcGxlIGxhbmd1YWdlLCB3aGF0IHZhbHVlcyBtdXN0IHRoZSBib29sZWFuIHZhcmlhYmxlcyBob2xkIGluIG9yZGVyIHRvIHNhdGlzZnkgZWFjaCBvZiB0aGUgY2hlY2twb2ludHM/Jm5ic3A7PFwvcD5cclxuIiwiaW5wdXQiOiI8cD5JbnB1dCB3aWxsIGJlIGEgc2luZ2xlIHN5bnRhY3RpY2FsbHkgY29ycmVjdCBwcm9ncmFtIGluIHRoaXMgc2ltcGxlIGxhbmd1YWdlLiBLZXl3b3JkcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBpbiBhbGwgbG93ZXIgY2FzZSwgYW5kIGJvb2xlYW4gdmFyaWFibGVzIGFyZSBndWFyYW50ZWVkIHRvIGVhY2ggYmUgYSBzaW5nbGUgdXBwZXIgY2FzZSBsZXR0ZXIuIFdoaXRlIHNwYWNlIChzcGFjZSwgdGFiIG9yIG5ld2xpbmUpIGlzIGd1YXJhbnRlZWQgdG8gc2VwYXJhdGUga2V5d29yZHMsIGFuZCBzdXJyb3VuZCBleHByZXNzaW9ucy4gRXhwcmVzc2lvbnMgd2lsbCBub3QgY29udGFpbiB3aGl0ZXNwYWNlLiBFdmVyeSAmbHQ7c3RhdGVtZW50IGxpc3QmZ3Q7IHdpbGwgY29udGFpbiBhdCBsZWFzdCBvbmUgc3RhdGVtZW50LiBUaGUgaW5wdXQgcHJvZ3JhbSB3aWxsIG5vdCB1c2UgbW9yZSB0aGFuIDIwIG9mIHRoZSBhdmFpbGFibGUgdmFyaWFibGVzLCBhbmQgd2lsbCBub3QgY29udGFpbiBtb3JlIHRoYW4gNSwwMDAgc3RhdGVtZW50cy4gTm8gQm9vbGVhbiBleHByZXNzaW9uIHdpbGwgYmUgbG9uZ2VyIHRoYW4gMTI4IGNoYXJhY3RlcnMuJm5ic3A7PFwvcD5cclxuIiwib3V0cHV0IjoiPHA+Rm9yIGVhY2ggY2hlY2twb2ludCwgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyLCBvdXRwdXQgYSBzaW5nbGUgbGluZSwgY29uc2lzdGluZyBvZiAmbHNxdW87Jmd0OyZyc3F1bzsgZm9sbG93ZWQgYnkgZWl0aGVyIGEgbGlzdCBvZiB2YXJpYWJsZXMsIG9yIHRoZSB3b3JkICZsc3F1bzt1bnJlYWNoYWJsZSZyc3F1bzsuIElmIHRoZSBjaGVja3BvaW50IGlzIHJlYWNoYWJsZSwgb3V0cHV0IGEgbGlzdCBvZiB2YXJpYWJsZXMsIGluIGFscGhhYmV0aWNhbCBvcmRlciwgd2l0aCBhbiB1cHBlciBjYXNlIGxldHRlciBpZiBpdCBtdXN0IGJlIHRydWUsIG9yIGEgbG93ZXIgY2FzZSBsZXR0ZXIgaWYgaXQgbXVzdCBiZSBmYWxzZSB0byByZWFjaCB0aGUgY2hlY2twb2ludC4gT21pdCB0aGUgdmFyaWFibGUgaWYgaXQgY2FuIGJlIGVpdGhlci4gSWYgdGhlIGNoZWNrcG9pbnQgaXMgbm90IHJlYWNoYWJsZSwgdGhlbiBvdXRwdXQgdGhlIHdvcmQgJmxzcXVvO3VucmVhY2hhYmxlJnJzcXVvOywgZW50aXJlbHkgaW4gbG93ZXIgY2FzZS4gRG8gbm90IHByaW50IGFueSBzcGFjZXMsIGFuZCBkbyBub3QgcHJpbnQgYW55IGJsYW5rIGxpbmVzIGJldHdlZW4gbGluZXMgb2Ygb3V0cHV0LiZuYnNwOzxcL3A+XHJcbiIsImhpbnQiOiIiLCJvcmlnaW5hbCI6IjEiLCJodG1sX3RpdGxlIjoiMCIsInByb2JsZW1fbGFuZ190Y29kZSI6IkVuZ2xpc2gifV0=

출처

University > North American Invitational Programming Contest > UCIPC 2013 J번