# -*- coding: utf-8 -*-
"""lancer de des"""
from random import *
from operator import add

def de(faces):
    """resultat d'un de avec nbre de faces en parametre"""
    return randint(1,faces)
   
def jet(expr = ""):
    """effectue un jet de de a partir d'expressions de type '1d20+3' -
    retourne un resultat chiffre et un resultat detaille."""
    decoupage = []
    lancer = []
    estDe = False
    nbDes = 0
    res = 0
    resDetaille = ""
    signe = ""
    tmp = ""
    valide = True

    #on decoupe la chaine en se basant sur tout ce qui n'est pas un chiffre:
    expr.replace(" ","")
    if len(expr) > 0:
        expr += " " #pour forcer la prise en compte du dernier membre
        for car in expr:
            if estEntier(car):
                tmp += car
            else:
                if car.lower() == "d":
                   estDe = True
                   nbDes = int(tmp)
                   lancer = []
                   tmp = ""
                else:
                   if estDe:
                       for i in range(0, nbDes):
                           lancer.append(de(int(tmp)))
                       decoupage.append(lancer)
                       estDe = False
                   else:
                       decoupage.append(tmp)
                   if car != " ":    
                       decoupage.append(car)
                   tmp = ""
        
        #on calcule ensuite tout ca:
        for elt in decoupage:
            if type(elt) == list:
               elt = int(sum(elt[:]))

            if estEntier(elt):
               elt = int(elt)
               if signe == "-": elt = -1 * elt
               res += elt    
            else:
               if elt == "+" or elt == "-":  
                   signe = elt
               else:
                   valide = False
                   break

        #on met en forme le resultat detaille
        for elt in decoupage:
           if type(elt) == list:
               elt = map(str, elt) 
               elt = ",".join(elt)
           resDetaille += (" "+elt)       
        resDetaille = resDetaille.replace(" ","")

    if not valide or len(expr) == 0:
        res = None
        resDetaille = ""
            
    return (res, resDetaille)

def estEntier(val):
    """renvoie vrai si val est convertible en entier"""
    retour = False
    try:
        val3 = float(val)
        val2 = int(val3)
        retour = (val2 == val3)
    except:
        pass
    return retour

def estJetValide(expr):
    """renvoie vrai si la syntaxe est bien celle d'un lancer de des"""
    valide = True
    if len(expr) > 0:
        for car in expr:
            valide = (estEntier(car) or (car in ["d","D","+","-"]))
    else:
        valide = False
    return valide    

if __name__ == "__main__":
# si lancement direct:
    while True:
##        lancer = jet(raw_input(" > "))
##        print("{} ({})".format(lancer[0], lancer[1]))
        print estJetValide(raw_input(" > "))
  

