{-# LANGUAGE FlexibleContexts, OverloadedStrings #-} import Control.Applicative import Control.Monad import qualified Data.ByteString.Char8 as B import Data.Maybe (fromJust) import Text.Printf import Debug.Trace f :: Integer -> Integer -> Integer -> Integer f a b x = (x `div` a) * (b - 1) + x bisect :: (Integer -> Bool) -> (Integer,Integer) -> Integer bisect f (b,e) = if e-b == 1 then e else let m = (b + e) `div` 2 in if f m then bisect f (b,m) else bisect f (m,e) main = do [a,b,c] <- getInts let g = \x -> f a b x >= c print $ bisect g (0,c+1) -- util getInts :: IO [Integer] getInts = map (fst . fromJust . B.readInteger) . B.words <$> B.getLine