#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
import sys
import os
 
EJUDGE = bool(os.environ.get("EJUDGE", "0") == "1")
VERBOSE = bool(os.environ.get("VERBOSE", "0") == "1")
YANDEX = False
 
if EJUDGE:
    OK = 0
    PE = 4
    WA = 5
    CF = 6
    AC = 8
else:
    OK = 0
    WA = 1
    PE = 2
    CF = 3
 
LOG = ""
# sys.stdout.reconfigure(encoding='utf-8')
# sys.stderr.reconfigure(encoding='utf-8')
 
def quit(status, log="", score=0):
    # Если задано значение параметра log, то выводится это значение, иначе выводится глобальная переменная LOG
    if EJUDGE and not VERBOSE and status != PE:
        log = "Полные протоколы проверки будут доступны после окончания олимпиады"
    sys.stderr.write(log if log else LOG)
    if EJUDGE:
        if status == WA or status == OK:
            sys.stdout.write(str(score) + "\n0\n" + str(AC) + "\n")
    elif YANDEX:
        if status == WA or status == OK:
            sys.stdout.write("$" + str(score) + "$\n")
            status = OK
    else:
        sys.stdout.write("Score: " + str(score) + "\n")
    sys.exit(status)
 
 
def fix_ans(ans):
    if (len(ans) == 0):
        quit(PE, "Ответ пустой")
    if len(ans) > 100:
        quit(PE, "Введена слишком длинная формула.")
 
    ans = ans.replace("N", "n")
    ans = ans.replace("M", "m")
    ans = ans.replace("м", "m") # русская
    ans = ans.replace("М", "m") # русская
    ans = ans.replace("п", "n") # русская
    ans = ans.replace("Н", "n") # русская
    ans = ans.replace("н", "n") # русская
    ans = ans.replace("к", "k") # русская
    ans = ans.replace("К", "k") # русская
    ans = ans.replace("K", "k")
    ans = ans.replace(chr(8722), "-") # неправильный минус
 
    for char in ans:
        if char not in " nmk+-*/()0123456789":
            quit(PE, "Ответ содержит недопустимый символ: ''" + char + "''" + "\n")
    if "**" in ans:
        quit(PE, "В ответе не может использоваться ''**''" + "\n")
    if "//" in ans:
        quit(PE, "В ответе не может использоваться ''//''" + "\n")
 
    return ans
 
def f(s, n, m, k):
    return s.replace("n", str(n)).replace("m", str(m)).replace("k", str(k))
 
def is_right(ans, corr_ans):
    ans = fix_ans(ans)
    EPS = 1e-6
    try:
        for n in range(1, 32):
            for m in range(1, 32):
                for k in range(1, min(n, m)):
                    if (n % k == 0 and m % k == 0):
                        if abs(eval(f(ans, n, m, k)) - eval(f(corr_ans, n, m, k))) > EPS:
                            return 0
    except ZeroDivisionError as E:
        quit(WA, "При вычислении выражения возникло деление на ноль\n", 0)
    except Exception as E:
        quit(PE, "Некорректное выражение.\n")
    return 1
 
fin = open(sys.argv[2], "r")
 
lst = fin.read()
lst = lst.split('\n')
lst = list(map(str, lst))
 
ans1 = ""
ans2 = ""
cnt = 0
for s in lst:
    s = s.strip()
    if s:
        if cnt == 0:
            ans1 = s
        elif cnt == 1:
            ans2 = s
        cnt += 1
 
if cnt == 0:
    quit(PE, "Ответ пустой.")
elif cnt == 1:
    quit(PE, "Введена только одна формула..")
elif cnt > 2:
    quit(PE, "Введено больше двух формул.")
 
corr_ans1 = "(n / k) * (m / k)"
corr_ans2 = "((n / k) - 1) * ((m / k) - 1)"
 
is_ans1_right = is_right(ans1, corr_ans1)
is_ans2_right = is_right(ans2, corr_ans2)
 
if is_ans1_right and is_ans2_right:
    quit(OK, "Обе формулы верны", 100)
elif is_ans1_right:
    quit(WA, "Верна только первая формула", 40)
elif is_ans2_right:
    quit(WA, "Верна только вторая формула", 60)
else:
    quit(WA, "Обе формулы неверны", 0)
