/*矩阵二分
Number Sequence
--------------------------------------------------------------------------------
Time Limit: 1 Second Memory Limit: 32768 KB
--------------------------------------------------------------------------------
A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Input
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
Sample Input
1 1 3
1 2 10
0 0 0
Sample Output
2
5
*/
#include<iostream>//2157172 2010-04-12 20:15:19 Accepted 2105 C++ 0 184 悔惜晟
using namespace std;
const int mod = 7;
struct Mat
{
int a[2][2];
}intl, unil;
Mat mal(Mat p, Mat q)
{
Mat r;
int i, j, k;
for(i = 0 ;i < 2; i++)
{
for(j = 0; j < 2; j++)
{
r.a[i][j] = 0;
for(k = 0; k <2 ; k++)
r.a[i][j] += p.a[i][k] * q.a[k][j];
if(r.a[i][j] >= mod)
r.a[i][j] %= mod;
}
}
return r;
}
Mat mul(int n)
{
Mat p, q;
p = intl;
q = unil;
while(n > 1)
{
if(n % 2 == 0)
{
q = mal(q, q);
n /= 2;
}
else
{
p = mal(q, p);
n--;
}
}
return mal(q, p);
}
int main()
{
int a, b, n;
while(cin>>a>>b>>n)
{
if(a == 0 && b ==0 && n ==0 )
continue;
if(n == 1 || n == 2)
cout<<"1"<<endl;
else
{
intl.a[0][0] = 1;
intl.a[1][1] = 1;
intl.a[0][1] = 0;
intl.a[1][0] = 0;
unil.a[0][0] = a;//开始的时候这里写成a了
unil.a[0][1] = 1;
unil.a[1][0] = b;
unil.a[1][1] = 0;
Mat ans;
n -= 2;
ans = mul(n);
cout<<(ans.a[0][0] + ans.a[1][0]) % mod<<endl;
}
}
}