Point: 50.0
Time limit: 1.0s
Memory limit: 125 M
Input: stdin
Output: stdout
Author:  
Problem type
Ngôn ngữ cho phép
C, C#, C++, Java, Pascal, Python, Text

Biết rằng \((a\ *\ b) \bmod c = ((a \bmod c)\ *\ (b \bmod c))\ \bmod c\)

Ví dụ: \((10\ *\ 3) \bmod 4 = 2\)\(((10 \bmod 4)\ *\ (3 \bmod 4)) \bmod 4 = 6 \bmod 4 = 2;\) trong khi đó giới hạn biểu diễn của long long là cỡ \(18\) chữ số, hãy tính \((a\ *\ b) \bmod c\) khi mà tích \((a\ *\ b)\) có thể vượt quá khả năng biểu diễn của long long trong \(C++.\)

Trong bài này, số \(c\) có thể lên đến \(10^{18}\), đây là một điều khá tệ vì sau khi \(\bmod\) xong, ta nhân lại vẫn có thể tràn số. Để khắc phục điều này, bạn hãy tìm hiểu về phép nhân Ấn độ, hoặc bạn liên hệ Mr Toàn để có một trick khá hay cho phép toán này nhé!

Yêu cầu

Tính \((a\ *\ b) \bmod c\)

Dữ liệu

  • Dòng 1 chứa 2 số nguyên dương \(a\)\(b\) (\(a,b \leq 10^{18}\));

  • Dòng 2 ghi số nguyên dương \(c\) (\(c \leq 10^{18}\)).

Kết quả

In ra kết quả của \((a\ *\ b) \bmod c.\)

Ví dụ

INPUT OUTPUT
473533207341277217 661950249426733688
47834567961336203
20568985178261806