#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int lint; typedef pair IP; typedef pair LLP; typedef pairCP; #define rep(i, n) for (int i = 0; i < n; i++) #define repr(i, n) for (int i = n; i >= 0; i--) #define sort(v) sort((v).begin(), (v).end()) #define reverse(v) reverse((v).begin(), (v).end()) #define upper(v,hoge) upper_bound(v.begin(),v.end(),hoge) #define lower(v,hoge) lower_bound(v.begin(),v.end(),hoge) #define llower(v,hoge) *lower_bound(v.begin(), v.end(), hoge) #define lupper(v,hoge) *upper_bound(v.begin(), v.end(), hoge) string ten_to_two(lint N) { //10進数から2進数 string ans; while (1) { ans.push_back(char('0' + N % 2)); N /= 2; if (N == 0) { break; } } reverse(ans); return ans; } lint power(lint A, lint B) { lint ans = 1; rep(i, B) { ans *= A; } return ans; } int main() { lint F0, F1, N; cin >> F0 >> F1 >> N; string S0 = ten_to_two(F0); string S1 = ten_to_two(F1); reverse(S0); reverse(S1); while (1) { S0.push_back('0'); if (S0.size() == 50) { break; } } while (1) { S1.push_back('0'); if (S1.size() == 50) { break; } } reverse(S0); reverse(S1); vectorA(50); rep(i, 50) { if (S0[i] == '0' && S1[i] == '0') { if (N % 3 == 0) { A[i] = '0'; } else if (N % 3 == 1) { A[i] = '0'; } else if (N % 3 == 2) { A[i] = '0'; } } else if (S0[i] == '0' && S1[i] == '1') { if (N % 3 == 0) { A[i] = '0'; } else if (N % 3 == 1) { A[i] = '1'; } else if (N % 3 == 2) { A[i] = '1'; } } else if (S0[i] == '1' && S1[i] == '0') { if (N % 3 == 0) { A[i] = '1'; } else if (N % 3 == 1) { A[i] = '0'; } else if (N % 3 == 2) { A[i] = '1'; } } else if (S0[i] == '1' && S1[i] == '1') { if (N % 3 == 0) { A[i] = '1'; } else if (N % 3 == 1) { A[i] = '1'; } else if (N % 3 == 2) { A[i] = '0'; } } } reverse(A); lint ans = 0; rep(i, 50) { ans += lint(A[i]-'0') * power(2, i); } cout << ans << endl; }