The Fibonacci sequence is defined as F(n) = F(n-1) + F(n-2). You have developed two sequences of numbers. The first sequence that uses the bitwise XOR operation instead of the addition method is called the Xoronacci number. It is described as follows:
X(n) = X(n-1) XOR X(n-2)
The second sequence that uses the bitwise XNOR operation instead of the addition method is called the XNoronacci number. It is described as follows:
E(n) = E(n-1) XNOR E(n-2)
The first and second numbers of the sequence are as follows:
X(1) = E(1) = a
X(2) = E(2) = b
Your task is to determine the value of max(X(n),E(n)), where n is the n th term of the Xoronacci and XNoronacci sequence.

-----Input:-----
The first line consists of a single integer T denoting the number of test cases.
The first and the only line of each test case consists of three space separated integers a, b and n.

-----Output:-----
For each test case print a single integer max(X(n),E(n)).

-----Constraints-----
- $1 \leq T \leq 1000$
- $2 \leq a,b,n \leq 1000000000000$

-----Sample Input:-----
1
3 4 2 

-----Sample Output:-----
4

-----EXPLANATION:-----
Xoronacci Sequence : 3 4 7 …….
XNoronacci Sequence : 3 4 0 …….
Here n = 2. Hence max(X(2),E(2)) = 4

Difficulty: interview

Starter code:

Solutions:
# Python3 program to find XNOR
# of two numbers
import math


def swap(a, b):
 temp = a
 a = b
 b = temp


# log(n) solution
def xnor(a, b):
 # Make sure a is larger
 if (a < b):
  swap(a, b)

 if (a == 0 and b == 0):
  return 1;

 # for last bit of a
 a_rem = 0

 # for last bit of b
 b_rem = 0

 # counter for count bit and
 # set bit in xnor num
 count = 0

 # for make new xnor number
 xnornum = 0

 # for set bits in new xnor
 # number
 while (a != 0):

  # get last bit of a
  a_rem = a & 1

  # get last bit of b
  b_rem = b & 1

  # Check if current two
  # bits are same
  if (a_rem == b_rem):
   xnornum |= (1 << count)

  # counter for count bit
  count = count + 1

  a = a >> 1
  b = b >> 1

 return xnornum;


t= int(input())
for o in range(t):
 a,b,n=map(int,input().split())
 c=a^b
 x=bin(c)
 x=x.split("b")
 x=x[1]
 x=len(x)
 d=xnor(a,b)
 p=[a,b,c];r=[a,b,d]
 k=n%3-1
 if p[k]>r[k]:
  print(p[k])
 else :
  print(r[k])

import math

def xnor(num1, num2): 
  
 if (num1 < num2): 
  temp = num1 
  num1 = num2 
  num2 = temp 
 num1 = togglebit(num1) 
  
 return num1 ^ num2 
 
def togglebit( n): 
 
 if (n == 0): 
  return 1
 
 i = n 
 n = n|(n >> 1) 
 n |= n >> 2
 n |= n >> 4
 n |= n >> 8
 n |= n >> 16
 
 return i ^ n 

for _ in range(int(input())):
 a, b, n = [int(i) for i in input().split()]
 
 xoro = [a, b, a^b]
 xnoro = [a, b]
 index = 2
 
 while index != 8:
  xnoro.append(xnor(xnoro[index-1], xnoro[index-2]))
  index += 1
 
 if n > 8:
  print(max(xoro[(n%3)-1], xnoro[n%3+5]))
 else:
  print(max(xoro[(n%3)-1], xnoro[n-1]))

# Python3 program to find XNOR
# of two numbers
import math


def swap(a, b):
 temp = a
 a = b
 b = temp


# log(n) solution
def xnor(a, b):
 # Make sure a is larger
 if (a < b):
  swap(a, b)

 if (a == 0 and b == 0):
  return 1;

 # for last bit of a
 a_rem = 0

 # for last bit of b
 b_rem = 0

 # counter for count bit and
 # set bit in xnor num
 count = 0

 # for make new xnor number
 xnornum = 0

 # for set bits in new xnor
 # number
 while (a != 0):

  # get last bit of a
  a_rem = a & 1

  # get last bit of b
  b_rem = b & 1

  # Check if current two
  # bits are same
  if (a_rem == b_rem):
   xnornum |= (1 << count)

  # counter for count bit
  count = count + 1

  a = a >> 1
  b = b >> 1

 return xnornum;


t= int(input())
for o in range(t):
 a,b,n=map(int,input().split())
 c=a^b
 x=bin(c)
 x=x.split("b")
 x=x[1]
 x=len(x)
 d=xnor(a,b)
 p=[a,b,c];r=[a,b,d]
 k=n%3-1
 if p[k]>r[k]:
  print(p[k])
 else :
  print(r[k])

# Python3 program to find XNOR
# of two numbers
import math


def swap(a, b):
 temp = a
 a = b
 b = temp


# log(n) solution
def xnor(a, b):
 # Make sure a is larger
 if (a < b):
  swap(a, b)

 if (a == 0 and b == 0):
  return 1;

 # for last bit of a
 a_rem = 0

 # for last bit of b
 b_rem = 0

 # counter for count bit and
 # set bit in xnor num
 count = 0

 # for make new xnor number
 xnornum = 0

 # for set bits in new xnor
 # number
 while (a != 0):

  # get last bit of a
  a_rem = a & 1

  # get last bit of b
  b_rem = b & 1

  # Check if current two
  # bits are same
  if (a_rem == b_rem):
   xnornum |= (1 << count)

  # counter for count bit
  count = count + 1

  a = a >> 1
  b = b >> 1

 return xnornum;


t= int(input())
for o in range(t):
 a,b,n=map(int,input().split())
 c=a^b
 x=bin(c)
 x=x.split("b")
 x=x[1]
 x=len(x)
 d=xnor(a,b)
 p=[a,b,c];r=[a,b,d]
 k=n%3-1
 if p[k]>r[k]:
  print(p[k])
 else :
  print(r[k])

# Python3 program to find XNOR
# of two numbers
import math


def swap(a, b):
 temp = a
 a = b
 b = temp


# log(n) solution
def xnor(a, b):
 # Make sure a is larger
 if (a < b):
  swap(a, b)

 if (a == 0 and b == 0):
  return 1;

 # for last bit of a
 a_rem = 0

 # for last bit of b
 b_rem = 0

 # counter for count bit and
 # set bit in xnor num
 count = 0

 # for make new xnor number
 xnornum = 0

 # for set bits in new xnor
 # number
 while (a != 0):

  # get last bit of a
  a_rem = a & 1

  # get last bit of b
  b_rem = b & 1

  # Check if current two
  # bits are same
  if (a_rem == b_rem):
   xnornum |= (1 << count)

  # counter for count bit
  count = count + 1

  a = a >> 1
  b = b >> 1

 return xnornum;


t= int(input())
for o in range(t):
 a,b,n=list(map(int,input().split()))
 c=a^b
 x=bin(c)
 x=x.split("b")
 x=x[1]
 x=len(x)
 d=xnor(a,b)
 p=[a,b,c];r=[a,b,d]
 k=n%3-1
 if p[k]>r[k]:
  print(p[k])
 else :
  print(r[k])


# Python3 program to find XNOR
# of two numbers
import math


def swap(a, b):
 temp = a
 a = b
 b = temp


# log(n) solution
def xnor(a, b):
 # Make sure a is larger
 if (a < b):
  swap(a, b)

 if (a == 0 and b == 0):
  return 1;

 # for last bit of a
 a_rem = 0

 # for last bit of b
 b_rem = 0

 # counter for count bit and
 # set bit in xnor num
 count = 0

 # for make new xnor number
 xnornum = 0

 # for set bits in new xnor
 # number
 while (a != 0):

  # get last bit of a
  a_rem = a & 1

  # get last bit of b
  b_rem = b & 1

  # Check if current two
  # bits are same
  if (a_rem == b_rem):
   xnornum |= (1 << count)

  # counter for count bit
  count = count + 1

  a = a >> 1
  b = b >> 1

 return xnornum;


t= int(input())
for o in range(t):
 a,b,n=list(map(int,input().split()))
 c=a^b
 x=bin(c)
 x=x.split("b")
 x=x[1]
 x=len(x)
 d=xnor(a,b)
 p=[a,b,c];r=[a,b,d]
 k=n%3-1
 if p[k]>r[k]:
  print(p[k])
 else :
  print(r[k])


def xnor(a, b):
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b
def solve():
 a, b, n = list(map(int, input().split()))
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))

for _ in range(int(input())):
 solve()


def xnor(a, b):
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b
def solve():
 a, b, n = list(map(int, input().split()))
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))
  
t = int(input())
while(t > 0):
 solve()
 t = t-1


def xnor(a, b):
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b
def solve():
 a, b, n = list(map(int, input().split()))
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))
  
t = int(input())
while(t > 0):
 solve()
 t = t-1


# cook your dish here
def xnor(a, b):
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b
def solve():
 a, b, n = map(int, input().split())
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))
t = int(input())
while(t > 0):
 solve()
 t = t-1

import math 
 
def togglebit( n): 
 
 if (n == 0): 
  return 1
 i = n 
 n = n|(n >> 1) 
 n |= n >> 2
 n |= n >> 4
 n |= n >> 8
 n |= n >> 16
 
 return i ^ n 
def xnor( num1, num2): 
  
 # Make sure num1 is larger 
 if (num1 < num2): 
  temp = num1 
  num1 = num2 
  num2 = temp 
 num1 = togglebit(num1) 
  
 return num1 ^ num2 
def x(A,B,N):
 if N==1:
  return A
 elif N==2:
  return B
 else:
  t0=A^B
  t1=B^t0
  t2=t0^t1
  if N%3==0:
   return t0
  elif N%3==1:
   return t1
  else:
   return t2
   
def xn(A,B,N):
 if N==1:
  return A
 elif N==2:
  return B
 else:
  cache=[xnor(A,B)]
  cache.append(xnor(cache[0],B))
  for i in range(2,7):
   cache.append(xnor(cache[i-1],cache[i-2]))
  t1=xnor(cache[6],cache[5])
  t2=xnor(cache[6],t1)
  t0=xnor(t2,t1)
  if N<=9:
   return cache[N-3]
  else:
   if N%3==0:
    return t0
   elif N%3==1:
    return t1
   else:
    return t2
 
t=int(input())
for _ in range(t):
 p,q,n=map(int,input().split())
 print(max(x(p,q,n),xn(p,q,n)))

def xnor(a, b):
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b
def solve():
 a, b, n = map(int, input().split())
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))
t = int(input())
while(t > 0):
 solve()
 t = t-1


def togglebit( n): 
 
 if (n == 0): 
  return 1

 i = n 

 n = n|(n >> 1) 

 n |= n >> 2
 n |= n >> 4
 n |= n >> 8
 n |= n >> 16
 
 return i ^ n 
  
def xnor( num1, num2): 
  
 if (num1 < num2): 
  temp = num1 
  num1 = num2 
  num2 = temp 
 num1 = togglebit(num1) 
  
 return num1 ^ num2 
def nthXorFib(n, a, b): 
 if n == 0 :  
  return a 
 if n == 1 :  
  return b 
 if n == 2 :  
  return a ^ b 
 
 return nthXorFib(n % 3, a, b) 
def nthXnorFib(n, a, b): 
 if n == 0 :  
  return a 
 if n == 1 :  
  return b 
 if n == 2 :  
  return xnor(a,b)
 
 return nthXnorFib(n % 3, a, b) 
 
t=int(input())
while(t):
 a,b,n=map(int,input().split())
 print(max(nthXnorFib(n-1,a,b),nthXorFib(n-1,a,b)))
 t-=1

# cook your dish here
def togglebit(n):
 if (n == 0):
  return 1
 
 i = n; 

 n |= n >> 1; 
 
 n |= n >> 2 
 n |= n >> 4 
 n |= n >> 8 
 n |= n >> 16
 return i ^ n

 
def xnor(num1,num2):
 if (num1 < num2):
  temp = num1
  num1 = num2
  num2 = temp
 num1 = togglebit(num1)
 
 return num1 ^ num2
 


def xn(a,b,n):
 f = [0]*3 
 f[0] = a
 f[1] = b
 
 f[2] = xnor(a,b)
 if(n%3==0):
  return f[2]
 else:
  return f[(n%3)-1]



def fib(a, b, n):
 f = [0]*3 
 f[0] = a 
 f[1] = b
 f[2] = a^b
 if(n%3==0):
  return f[2]
 else:
  return f[(n%3)-1]
 

def __starting_point():
 for _ in range(int(input())):
  a,b,n = list(map(int, input().split()))
  print(max(fib(a,b,n), xn(a,b,n)))


__starting_point()

# cook your dish here
def xnor(a, b):
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b
def solve():
 a, b, n = map(int, input().split())
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))
t = int(input())
while(t > 0):
 solve()
 t = t-1

import sys
import math
from collections import defaultdict,Counter

input=sys.stdin.readline
def print(x):
 sys.stdout.write(str(x)+"\n")

# sys.stdout=open("CP2/output.txt",'w')
# sys.stdin=open("CP2/input.txt",'r')

# m=pow(10,9)+7
t=int(input())
for i in range(t):
 a,b,n=map(int,input().split())
 c=a^b
 c1=bin(c).lstrip('0b')
 c1=list(c1.rjust(max(len(bin(a)),len(bin(b)))-2,'0'))
 # print(c1)
 for j in range(len(c1)):
  if c1[j]=='0':
   c1[j]='1'
  else:
   c1[j]='0'
 c1=int(''.join(c1),2)
  # print(c1,end=' ')
 l=[a,b,max(c,c1)]
 # if a==b:
 #   l[2]=1
 # n1=n
 # a1,b1=a,b
 ans=l[(n-1)%3]
 print(ans)
 # while n1-2:
 #   n1-=1
 #   c=a^b
 #   print(c,end=' ')
 #   a,b=b,c
 # print()
 # a,b=a1,b1
 # while n-2:
 #   n-=1
 #   c1=bin(a^b).lstrip('0b')
 #   c1=list(c1.rjust(max(len(bin(a)),len(bin(b)))-2,'0'))
 #   # print(c1)
 #   for j in range(len(c1)):
 #       if c1[j]=='0':
 #           c1[j]='1'
 #       else:
 #           c1[j]='0'
 #   c1=int(''.join(c1),2)
 #   print(c1,end=' ')
 #   a,b=b,c1
 #   # print(max(c,int(''.join(c1),2)))


from sys import stdin
import math
# Input data
#stdin = open("input", "r")


def togglebit(n):

 if (n == 0):
  return 1

 i = n
 n = n | (n >> 1)
 n |= n >> 2
 n |= n >> 4
 n |= n >> 8
 n |= n >> 16

 return i ^ n


def xnor(num1, num2):
 if (num1 < num2):
  temp = num1
  num1 = num2
  num2 = temp
 num1 = togglebit(num1)
 return num1 ^ num2

for _ in range(int(stdin.readline())):
 a, b, n = list(map(int, stdin.readline().split()))
 X = [a, b, a ^ b]
 E = [a, b]
 for i in range(2, n):
  E.append(xnor(E[-1], E[-2]))
  if E[-3:] == E[-6:-3]:
   break
 x = (n - 1) % 3
 e = (n - len(E)) % 3
 if e == 0:
  e = -1
 elif e == 1:
  e = -3
 else:
  e = -2
 print(max(X[x], E[e]))


import math 

def xnor(a, b): 
 if (a < b): 
  a, b = b, a
 
 if (a == 0 and b == 0) : 
  return 1; 
 # for last bit of a 
 a_rem = 0 
 # for last bit of b 
 b_rem = 0
 # counter for count bit and  
 #  set bit in xnor num 
 count = 0
 # for make new xnor number 
 xnornum = 0 
 # for set bits in new xnor 
 # number 
 while (a!=0) : 
  # get last bit of a 
  a_rem = a & 1 
  # get last bit of b 
  b_rem = b & 1 
  # Check if current two  
  # bits are same 
  if (a_rem == b_rem):      
   xnornum |= (1 << count) 
  # counter for count bit 
  count=count+1
   
  a = a >> 1
  b = b >> 1
  
 return xnornum;

for _ in range(int(input())):
 a, b, n = map(int, input().split())
 X = [a, b, a^b]
 E = [a, b, xnor(a, b)]
 
 i = (n-1)%3
 
 print(max(X[i], E[i]))

def xnor(a,b): 
 if (a < b): 
  a,b=b,a 
 
 if (a == 0 and b == 0):  
  return 1 
 
 a_rem = 0
 b_rem = 0
 
 count = 0 
 
 xnornum = 0 
 
 while (a):  
  a_rem = a & 1 
 
  b_rem = b & 1 
  if (a_rem == b_rem):         
   xnornum |= (1 << count)

  count+=1 
  a = a >> 1
  b = b >> 1 
 return xnornum 

def xor(a,b,n):
 if((n+2)%3==0):
  return a
 elif((n+1)%3==0):
  return b
 else:
  return a^b
  
def check(a,b,n):
 if(n==1):
  return a
 elif(n==2):
  return b
 if(n<=6):
  ans=xnor(a,b)
  for i in range(3,n):    
   ans,b=xnor(ans,b),ans
  return ans 
 elif((n-4)%3==0):
  return a
 elif((n-5)%3==0):
  return b
 elif((n-6)%3==0):
  return xnor(a,b)
  
for z in range(int(input())):
 a,b,n=map(int,input().split()) 
 print(max(xor(a,b,n),check(a,b,n)))

import math 
 
def swap(a,b): 
 
 temp=a 
 a=b 
 b=temp 
 
# log(n) solution 
def xnor(a, b): 
  
 # Make sure a is larger 
 if (a < b): 
  swap(a, b) 
 
 if (a == 0 and b == 0) : 
  return 1; 
  
 # for last bit of a 
 a_rem = 0 
  
 # for last bit of b 
 b_rem = 0 
 
 # counter for count bit and  
 #  set bit in xnor num 
 count = 0
  
 # for make new xnor number 
 xnornum = 0 
 
 # for set bits in new xnor 
 # number 
 while (a!=0) : 
  
  # get last bit of a 
  a_rem = a & 1 
   
  # get last bit of b 
  b_rem = b & 1 
 
  # Check if current two  
  # bits are same 
  if (a_rem == b_rem):      
   xnornum |= (1 << count) 
   
  # counter for count bit 
  count=count+1
   
  a = a >> 1
  b = b >> 1
  
 return xnornum;

def nthXorFib(n, a, b): 
 if n == 0 :  
  return a 
 if n == 1 :  
  return b 
 if n == 2 :  
  return a ^ b 
 
 return nthXorFib(n % 3, a, b)

def nthXNorFib(n, a, b): 
 if n == 0 :  
  return a 
 if n == 1 :  
  return b 
 if n == 2 :  
  return xnor(a, b)
 
 return nthXNorFib(n % 3, a, b)

for test in range(int(input())):
 a, b, n = map(int, input().split())

 print(max(nthXNorFib(n - 1, a, b), nthXorFib(n - 1, a, b)))

def xnor(a, b) :
 if a == 0:
  return 1 ^ b 
 p = a
 a = a|(a>>1)
 a = a|(a>>2)
 a = a|(a>>4)
 a = a|(a>>8)
 a = a|(a>>16)
 a = a|(a>>32)
 a = a|(a>>64) 
 return (a ^ p) ^ b

def solve() :
 a, b, n = list(map(int, input().split()))
 n -= 1
 index = n % 3
 if index == 0:
  print(a)
 elif index == 1:
  print(b)
 else:
  x = a ^ b
  e = xnor(max(a, b), min(a, b))
  print(max(x, e))

for _ in range(int(input())) :
 solve()


t = int(input())
for x in range(t):
 a,b,n = list(map(int,input().split()))
 import math 
 
# Please refer below post for details of this function 
# https://www.geeksforgeeks.org/toggle-bits-significant-bit/ 
 def togglebit( n): 
  
  if (n == 0): 
   return 1
  
  # Make a copy of n as we are 
  # going to change it. 
  i = n 
  
  # Below steps set bits after 
  # MSB (including MSB) 
  
  # Suppose n is 273 (binary 
  # is 100010001). It does following 
  # 100010001 | 010001000 = 110011001 
  n = n|(n >> 1) 
  
  # This makes sure 4 bits 
  # (From MSB and including MSB) 
  # are set. It does following 
  # 110011001 | 001100110 = 111111111 
  n |= n >> 2
  n |= n >> 4
  n |= n >> 8
  n |= n >> 16
  
  return i ^ n 
   
 # Returns XNOR of num1 and num2 
 def xnor( num1, num2): 
   
  # Make sure num1 is larger 
  if (num1 < num2): 
   temp = num1 
   num1 = num2 
   num2 = temp 
  num1 = togglebit(num1) 
   
  return num1 ^ num2 

 def xor(x,y,p):
  if p%3 == 1:
   return x
  elif p%3 == 2:
   return y
  elif p%3 == 0:
   return (x^y)
 def xnnor(x,y,p):
  if p%3 == 1:
   return x
  elif p%3 == 2:
   return y
  elif p%3 == 0:
   return xnor(x,y) 
 #print(xor(a,b,n),xnor(a,b,n))
 print(max(xor(a,b,n),xnnor(a,b,n))) 


#Coded By Ujjwal Bharti
def binary(x):
 result = []
 while x != 0:
  temp = x%2
  x = x//2
  result.append(temp)
 return result
def binCount(x):
 count=0
 while x != 0:
  x = x//2
  count += 1 
 return count
def xnor(a,b):
 final = []
 count = max(binCount(a),binCount(b))
 abin = binary(a)
 bbin = binary(b)
 if count != len(abin):
  while len(abin) != count:
   abin.append(0)
 if count != len(bbin):
  while len(bbin) != count:
   bbin.append(0)
 #print(abin,bbin)
 i=0
 while i <count:
  if (bbin[i]==0 and abin[i]==0) or (bbin[i]==1 and abin[i]==1):
   final.append(1)
  else:
   final.append(0)
  i += 1
 #print(abin,bbin,final)
 ans = 0
 i = 0
 #print(final)
 for dig in final:
  ans += (dig*(2**i))
  #print(ans)
  i += 1
 return ans
 
tulu = int(input())
for _ in range(tulu):
 a,b,n = [int(x) for x in input().split()]
 x = a ^ b
 y = xnor(a,b)
 #print(y)
 value1 = x
 value2 = y
 if n %3==1:
  value1=a
  value2=a
 if n%3==2:
  value2=b
  value1=b
 print(max(value1,value2))

t = int(input())

def xnor(a, b): 
  
 # Make sure a is larger 
 if (a < b): 
  a, b = b, a
 
 if (a == 0 and b == 0) : 
  return 1; 
  
 # for last bit of a 
 a_rem = 0 
  
 # for last bit of b 
 b_rem = 0 
 
 # counter for count bit and  
 #  set bit in xnor num 
 count = 0
  
 # for make new xnor number 
 xnornum = 0 
 
 # for set bits in new xnor 
 # number 
 while (a!=0) : 
  
  # get last bit of a 
  a_rem = a & 1 
   
  # get last bit of b 
  b_rem = b & 1 
 
  # Check if current two  
  # bits are same 
  if (a_rem == b_rem):      
   xnornum |= (1 << count) 
   
  # counter for count bit 
  count=count+1
   
  a = a >> 1
  b = b >> 1
  
 return xnornum;

while t:
 t -= 1

 a, b, n = input().split()
 a, b, n = int(a), int(b), int(n)

 if n%3 == 1:
  print(a)
  continue

 if n%3 == 2:
  print(b)
  continue

 xor_ = a ^ b
 xnor_ = xnor(a, b)

 print(max(xor_, xnor_))