Problem: 2057C - Trip to the Olympiad
Language: python

Solution 1 (runtime: 203 ms):
# defaultdict, set, [i]*n, {}
# bootstrap for recursion
import os
from math import *
from heapq import *
from functools import lru_cache,reduce
from collections import *
from bisect import *
from itertools import *
import sys
from bisect import *
from io import BytesIO, IOBase
from types import GeneratorType
import random
RANDOM = random.randrange(2**62)

BUFSIZE = 8192
class FastIO(IOBase):
    newlines = 0
    def __init__(self, file):
        self._fd = file.fileno()
        self.buffer = BytesIO()
        self.writable = "x" in file.mode or "r" not in file.mode
        self.write = self.buffer.write if self.writable else None
    def read(self):
        while True:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            if not b:
                break
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines = 0
        return self.buffer.read()
    def readline(self):
        while self.newlines == 0:
            b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
            self.newlines = b.count(b"\n") + (not b)
            ptr = self.buffer.tell()
            self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
        self.newlines -= 1
        return self.buffer.readline()
    def flush(self):
        if self.writable:
            os.write(self._fd, self.buffer.getvalue())
            self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
    def __init__(self, file):
        self.buffer = FastIO(file)
        self.flush = self.buffer.flush
        self.writable = self.buffer.writable
        self.write = lambda s: self.buffer.write(s.encode("ascii"))
        self.read = lambda: self.buffer.read().decode("ascii")
        self.readline = lambda: self.buffer.readline().decode("ascii")
def bootstrap(f, stack=[]):
    """
    @bootstrap
    def fun():
        ans = yield fun()
        yield ans
    """
    def wrappedfunc(*args, **kwargs):
        if stack:
            return f(*args, **kwargs)
        else:
            to = f(*args, **kwargs)
            while True:
                if type(to) is GeneratorType:
                    stack.append(to)
                    to = next(to)
                else:
                    stack.pop()
                    if not stack:
                        break
                    to = stack[-1].send(to)
            return to
    return wrappedfunc
class dsu:
    def __init__(self, n):
        self.parent = [i for i in range(n)]
        self.rank = [0] * n
    
    def find(self, x):
        if self.parent[x] != x:
            self.parent[x] = self.find(self.parent[x])
        return self.parent[x]
    
    def union(self, x, y):
        xset, yset = self.find(x), self.find(y)
        if xset != yset:
            if self.rank[xset] < self.rank[yset]:
                self.parent[xset] = yset
            elif self.rank[xset] > self.rank[yset]:
                self.parent[yset] = xset
            else:
                self.parent[xset] = yset
                self.rank[yset] += 1
            return True
        return False
class segment_tree:
    def __init__(self, data, func=min):
        self.func = func
        self._data = _data = [list(data)]
        i, n = 1, len(_data[0])
        while 2 * i <= n:
            prev = _data[-1]
            _data.append([func(prev[j], prev[j + i]) for j in range(n - 2 * i + 1)])
            i <<= 1
    def query(self, start, stop):
        if start >= stop:
            return 0
        depth = (stop - start).bit_length() - 1
        return self.func(self._data[depth][start], self._data[depth][stop - (1 << depth)])
    def __getitem__(self, idx):
        return self._data[0][idx]
class fenwick_tree:
    def __init__(self,n):
        self.arr=[0]*(n+1)
        self.len=n
    def add(self,ind,v):
        ind+=1
        while(ind<=self.len):
            self.arr[ind]+=v
            ind+= ind & (-ind)
    def query(self,ind):
        ind+=1
        ans=0
        while(ind):
            ans+=self.arr[ind]
            ind-= ind & (-ind)
        return ans
def bins(array, x, l, h):
    while l <= h:
        m = l + (h - l)//2
        if array[m] == x:
            return m
        elif array[m] < x:
            l = m + 1
        else:
            h = m - 1
    return l
def factorials(MAX,MOD):
    factorial = [1] * MAX
    for i in range(1, MAX):
        factorial[i] = factorial[i - 1] * i % MOD
def mod_inverse(a, p):
    res = 1
    exp = p - 2
    while exp > 0:
        if exp % 2 == 1:
            res = res * a % p
        a = a * a % p
        exp //= 2
    return res
def invfactorials(MAX,MOD):
    invfactorial = [1] * MAX
    invfactorial[MAX - 1] = mod_inverse(factorial[MAX - 1], MOD)
    for i in range(MAX - 2, -1, -1):
        invfactorial[i] = invfactorial[i + 1] * (i + 1) % MOD
def ncr(n, r, factorial,invfactorial):
    if r > n:
        return 0
    return factorial[n] * invfactorial[r] % MOD * invfactorial[n - r] % MOD
def prime_div(n):
    pd = {}
    while n % 2 == 0:
        pd[2] = pd.get(2, 0) + 1
        n //= 2
    for i in range(3, int(sqrt(n)) + 1, 2):
        while n % i == 0:
            pd[i] = pd.get(i, 0) + 1
            n //= i
    if n > 2:
        pd[n] = pd.get(n, 0) + 1
    return pd
def radix(A):
    num_digits = len(str(max(A)))
    for digit in range(0, num_digits):
        B = [[] for _ in range(10)]
        for item in A:
            num = item // 10 ** (digit) % 10
            B[num].append(item)
        A = reduce(lambda x, y: x + y, B)
    return A
def gcd(a,b):
    if a%b==0:
        return b
    else:
        return gcd(b,a%b)
def lcm(a,b):
    return a//gcd(a,b)*b
inf = float('inf')
MOD = 10**9 + 7 
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda: sys.stdin.readline().rstrip("\r\n")
inps = lambda: map(int,input().split())
inpl = lambda: list(map(int, input().split()))
inpt = lambda: int(input())
yes = lambda: print("YES")
no = lambda: print("NO")
df = lambda: defaultdict(lambda:False)
dl = lambda: defaultdict(list)
d1 = lambda: defaultdict(lambda:-1)
d0 = lambda: defaultdict(lambda:0)
w = lambda x: x^RANDOM

def solve():
    l,r = inps()
    smm = 0 
    while True:
        p = 1
        while p*2 <= r:
            p*= 2
        if p <= l:
            l-= p
            r -= p
            smm += p
        else:
            break
    t = p+1 if p+1<=r else p-2
    print(smm+p, smm+p-1,smm+t)



    

n =1
n = inpt()
for _ in range(n):
    solve()

Solution 2 (runtime: 171 ms):
import sys
import math
import random
from heapq import *
from collections import Counter, defaultdict, deque
from functools import lru_cache
from itertools import permutations, combinations
from bisect import bisect_right, bisect_left, bisect
import decimal
import time
import re


input = lambda: sys.stdin.readline().rstrip()
minput = lambda: map(int, input().split())
linput = lambda: list(minput())


N = 64
MOD = 1000000007
MOD2 = 998244353
INF = 10 ** 50
ans = INF
primes = []
primes100 = (2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97)
primes1000 = (
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251,
257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397,
401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557,
563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997)
MODS = [920000647, 920000663, 950000929, 999999937, 999999527, 999999151, 1000000007, 1000000009, 1000000021, 1000000033]
PS = [131, 137, 139, 149, 151, 157, 163, 167, 173, 179]

def timing(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        end = time.time()
        result_time = end-start
        if result_time > 0.001:
            print(f"Времени заняло: {result_time:.5f} секунд")
        return res
    return wrapper


def factorization_list(n):
    """Разложение числа на простые множители в виде списка чисел"""
    res = []
    while n % 2 == 0:
        n //= 2
        res.append(2)

    i = 3
    while i**2 <= n:
        while n % i == 0:
            n //= i
            res.append(i)
        i += 2
    if n > 1:
        res.append(n)
    return sorted(res)


def factorization_dict(n):
    """Разложение числа на простые множители в словарь"""
    res = defaultdict(int)
    while n % 2 == 0:
        res[2] += 1
        n //= 2
    i = 3
    while i**2 <= n:
        while n % i == 0:
            res[i] += 1
            n //= i
        i += 2
    if n > 1:
        res[n] += 1
    return res


def sieve(primes_N):
    """Решето Эратосфена"""
    global primes
    primes = [1]*(primes_N+1)
    primes[0] = primes[1] = 0
    for j in range(4, primes_N+1, 2):
        primes[j] = 0

    i = 3
    while i**2 <= primes_N:
        if primes[i]:
            for j in range(i**2, primes_N+1, i):
                primes[j] = 0
        i += 2



def log2(n):
    """Логарифм по основанию 2"""
    res = 0
    while n:
        n >>= 1
        res += 1
    return res-1


def dfs(v, g, dp, vals, vis):
    vis[v] = 1
    for u in g[v]:
        if not vis[u]:
            vis[u] = 1
            dfs(u, g, dp, vals, vis)
            dp[v][0] += max(dp[u][0] + abs(vals[u][0]-vals[v][0]), dp[u][1]+abs(vals[u][1]-vals[v][0]))
            dp[v][1] += max(dp[u][0] + abs(vals[u][0]-vals[v][1]), dp[u][1]+abs(vals[u][1]-vals[v][1]))
            


            
            


def bfs(a, cnt, g):
    vis = [0]*(len(cnt))
    q = deque()
    for i in a:
        q.append((i, 1))
    res = -1
    while q:
        v, lvl = q.popleft()
        if cnt[v] > 0:
            res = max(res, lvl)
            continue
        for u in g[v]:

            if vis[u] == 0 and cnt[u] > 0:
                vis[u] = 1
                q.append((u, lvl+1))
            cnt[u] -= 1
    if res == -1:
        return 2
    return res+1


def YES(flag):
    return "YES" if flag else "NO"

def NO(flag):
    return "NO" if flag else "NO"


def is_setbit(number, bit):
    """Проверка установлен ли bit бит в числе number"""
    return (number >> bit) & 1



def setbit(number, bit):
    """Устанавливает bit бит в числе number"""
    number |= (1 << bit)
    return number


def togbit(number, bit):
    """Переключает bit бит в числе number"""
    number ^= (1 << bit)
    return number

def unsetbit(number, bit):
    """Обнуляет bit бит в числе number"""
    number &= ~(1 << bit)
    return number
               


def apr(start, end, step=1):
    """Формула арифметической прогрессии"""
    if start > end:
        if end % step == start % step:
            start, end = end, start
        else:
            if end % step < start % step:
                end += (start%step) - (end%step)
            else:
                end += (step-end%step) + (start%step)
            start, end = end, start
    
    count = (end-start)//step+1
    res = 0
    if end % step != start % step:
        if end % step > start % step:
            end -= (end%step)-(start%step)
        else:
            end -= (end%step)+(step-start%step)
    res += (start+end)*count//2
    return res


def cumsum(array):
    """Префикс сумма массива"""
    res = [0]*(len(array)+1)
    for i in range(len(array)):
        res[i+1] = res[i] + array[i]
    return res


def segsum(pref, left, right):
    """Вычисляет сумму префикс суммы на отрезке [left, right]"""
    return pref[right] - pref[left-1]


def mult(array, mod=None):
    """Вычисляет произведение всего списка по модулю"""
    res = 1
    for i in array:
        res *= i
        if mod is not None:
            res %= mod
    return res


def z_func(s):
    """Z-функция строки"""
    l, r = 0, 0
    n = len(s)
    z = [0]*n
    for i in range(1, n):
        if r >= i:
            z[i] = min(z[i-l], r-i+1)
        while z[i] + i < n and s[z[i]] == s[z[i]+i]:
            z[i] += 1
        if z[i] + i - 1 > r:
            l = i
            r = z[i] + i - 1
    return z


def get_hash():
    """Возвращает модули и основания для хеширования"""
    mod1, mod2 = random.sample(MODS, 2)
    p1, p2 = random.sample(PS, 2)
    return [mod1, mod2, p1, p2]

def get_pows(p, k, mod):
    """Вычисляет массив степеней p по модулю mod, длины k, начиная с p^0"""
    res = [0]*k
    cur = 1 % mod 
    for i in range(k):
        res[i] = cur
        cur *= p
        cur %= mod
    return res
        


def hashing(s, mod, p):
    """Вычисляет хеш строки по модулю mod с основанием p"""
    hsh = [0]
    n = len(s)
    h = 0
    for i in range(n):
        cur = ord(s[i]) - ord('a') + 1
        h = (p*h + cur) % mod
        hsh.append(h)
    return hsh


def seg_hash(hsh, l, r, pows, mod):
    """Вычисляет хеш подстроки [l, r]"""
    right = hsh[r+1]
    left = hsh[l]*pows[r-l+1]
    res = right-left
    return res%mod


def search(a, x):
    left = -1
    right = len(a)
    while left + 1 <right:
        mid = (left + right)//2
        if a[mid][0] <= x:
            left = mid
        else:
            right = mid
    return left



def pred():
    pass




def solve():
    l, r = minput()
    for i in range(32, -1, -1):
        if (l >> i) & 1 != (r >> i) & 1:
            x = 1 << i
            break

    x = r//x * x
    y = x-1
    for i in range(l, r+1):
        if i != x and i != y:
            z = i
            break
    print(x,y,z)
    

    
        
#@timing
def main():
    pred()
    tc = 1
    tc = int(input())
    for _ in range(tc):
        solve()



            
    


if __name__ == "__main__":
    main()