"""{ defOK perms(0) == 1
     defOK perms(n) == perms(n-1) * n  }"""
#PREMISES FOR NEXT LINE: 
# PRECONDITION VERIFIED FOR CALL:

n = readInt()
#PREMISES FOR ATTACHED PROOF, IF ANY: 
# True
#PREMISES FOR NEXT LINE: 
i = 0
#PREMISES FOR ATTACHED PROOF, IF ANY: 
# (i == 0)
#PREMISES FOR NEXT LINE: 
# (i == 0)
fac = 1
#PREMISES FOR ATTACHED PROOF, IF ANY: 
# (fac == 1)
# (i == 0)
"""{ 1.OK perms(0) == 1       def
     2.OK fac == 1           premise
     3.OK fac == perms(0)     subst 1 2
}"""
#PREMISES FOR NEXT LINE: 
# (fac == perms(0))
# INVARIANT VERIFIED ON LOOP ENTRY
while i != n :
    """{ invariant  fac == perms(i)
         modifies i, fac }""" 
    #PREMISES FOR LOOP BODY: 
    # (i != n)
    # (fac == perms(i))
    """{ 1.OK fac == perms(i)   premise   }"""
    #PREMISES FOR NEXT LINE: 
    # (fac == perms(i))
    i = i + 1
    #PREMISES FOR ATTACHED PROOF, IF ANY: 
    # (i == (i_old + 1))
    # (fac == perms(i_old))
    """{ 1.OK i == i_old + 1          premise
         2.OK fac == perms(i_old)     premise  # from the invariant
         4.OK fac == perms(i-1)       algebra 1 2
    }"""
    #PREMISES FOR NEXT LINE: 
    # (fac == perms((i - 1)))
    fac = fac * i
    #PREMISES FOR ATTACHED PROOF, IF ANY: 
    # (fac == (fac_old * i))
    # (fac_old == perms((i - 1)))
    """{ 1.OK fac == fac_old * i           premise
         2.OK fac_old == perms(i-1)        premise
         3.OK fac == perms(i-1) * i        subst 2 1
         4.OK perms(i) == perms(i-1) * i   def
         5.OK fac == perms(i)              subst 4 3
    }"""
    #PREMISES FOR NEXT LINE: 
    # (fac == perms(i))
    # INVARIANT VERIFIED AT END OF LOOP BODY
#PREMISES FOR NEXT LINE: 
# (fac == perms(i))
# not (i != n)

"""{ 1.OK not(i != n)       premise
     2.OK i == n            algebra 1
     3.OK fac == perms(i)   premise
     4.OK fac == perms(n)   subst 2 3
}"""
#PREMISES FOR NEXT LINE: 
# (fac == perms(n))