#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
 
#define IOS ios :: sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define AfterDecimal(n) cout << fixed << setprecision(n);
#define pb push_back
#define pp(a, b) pair <a, b>
#define ll long long int
#define ld long double
#define all(a) a.begin(), a.end()
#define pii pair<int, int>
#define pll pair<ll, ll>
#define F first
#define S second
#define itr iterator
#define bits(x) __builtin_popcount(x)
#define fori(n)  for (ll i = 0; i < n; i++)
#define forj(n)  for (ll j = 0; j < n; j++)
#define fork(n)  for (ll k = 0; k < n; k++)
#define vll vector <ll>
#define mll map <ll, ll>
#define vpll vector <pll>
 
 
using namespace __gnu_pbds;
using namespace std;
 
template <class T> T printr(T p){ cout << p << '\n'; return 0; }
template <class T> T printe(T p){ cout << p << '\n'; exit(0); }
template <class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template <class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }
 
 
//template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
 
typedef tree<int, null_type, less<int>, rb_tree_tag,  
            tree_order_statistics_node_update>  
    ordered_set;  
 
#ifdef LOCAL
#define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
template<typename Arg1>
void __f(const char* name, Arg1&& arg1){
    cout << "# "<< name << " = " << arg1 << '\n';
}
template<typename Arg1, typename... Args>
void __f(const char* names, Arg1 && arg1, Args &&... args){
        const char* comma = strchr(names + 1 ,',');
        cout << "# ";
        cout.write(names, comma - names)<< " = " << arg1 << " | ";
        __f(comma + 1, args...);
}
#else
#define debug(...) 36
#endif
 
ll power(ll x, ll y, ll p){ 
   ll res = 1;
   x = x % p;  
   while (y > 0) {
      if (y & 1) 
         res = (res * x) % p; 
      y = y >> 1;
      x = (x * x) % p; 
   }
   return res;
}
 
const ll INF = (ll)(8e18);
const ll MOD = (ll)(1e9 + 7);
const ll HMOD = (ll)(1e9 + 7);
const ll hashprime = (ll)31;
// (ll)4222234727
 
const int maxn = 200010;

ll a[2 * maxn], b[2 * maxn], hashs[3][30][2 * maxn], tp[2 * maxn]; 
bool s[3][30][2 * maxn];

int32_t main(){
    IOS;
    #ifndef ONLINE_JUDGE
    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);
    #endif
    ll n; cin >> n;
    for(ll i = 1; i <= n; i++) cin >> a[i];
    for(ll i = 1; i <= n; i++) cin >> b[i];
    for(ll i = 1; i <= n; i++) a[n + i] = a[i];
    for(ll i = 1; i <= n; i++) b[n + i] = b[i];
    for(ll i = 1; i <= n + n; i++){
        for(ll j = 0; j < 30; j++){
            s[0][j][i] = ((a[i] & (1 << j)) > 0);
            s[1][j][i] = ((b[i] & (1 << j)) > 0);
            s[2][j][i] = 1 ^ s[0][j][i];
        }
    }
    tp[0] = 1;
    for(int i = 1; i <= n + n; i++){
        tp[i] = tp[i - 1] * 2LL;
        tp[i] %= HMOD;
    }
    ll val = 1;
    for(ll i = 1; i <= n + n; i++){
        val = val * 2LL;
        val %= HMOD;
        for(ll j = 0; j < 30; j++){
             for(ll k = 0; k < 3; k++){
                 hashs[k][j][i] = hashs[k][j][i - 1];
                 if(s[k][j][i]){
                    hashs[k][j][i] += val;
                    hashs[k][j][i] %= HMOD;
                 }
             }
        }
    }
    // cerr << hashs[1][0][3] << '\n';
    // for(int j = 0; j < 2; j++){
    //      for(int i = 1; i <= n + n; i++){
    //          cerr << s[0][j][i];
    //     }
    //     cerr << '\n';
    // }
    // cerr << '\n';
    //     for(int j = 0; j < 2; j++){
    //      for(int i = 1; i <= n + n; i++){
    //          cerr << s[1][j][i];
    //     }
    //     cerr << '\n';
    // }
    // cerr << '\n';
    //     for(int j = 0; j < 2; j++){
    //      for(int i = 1; i <= n + n; i++){
    //          cerr << s[2][j][i];
    //     }
    //     cerr << '\n';
    // }
    // cerr << '\n';
    // cerr << s[1][0][1] << ' ' << s[1][0][2] << ' ' << s[1][0][3] << '\n';
    // cerr << s[2][0][2] << ' ' << s[2][0][3] << ' ' << s[2][0][4] << '\n';
    for(ll i = 1; i <= n; i++){
        bool flag = false;
        ll x = 0;
        for(ll j = 0; j < 30; j++){
            bool bita = ((a[i] & (1 << j)) > 0);
            bool bitb = ((b[1] & (1 << j)) > 0);
            if(bita ^ bitb){
                ll va = hashs[2][j][n + i - 1] - hashs[2][j][i - 1];
                va += HMOD;
                va %= HMOD;
                va = va * power(tp[i - 1], HMOD - 2, HMOD);
                va %= HMOD;
                ll vb = hashs[1][j][n];
                vb += HMOD;
                vb %= HMOD;
               // if(i == 2) cerr << va << ' ' << vb << " 3r3rr3r" << '\n';
                if(va != vb){
                    flag = true;
                    break;
                }
            }else{
                ll va = hashs[0][j][n + i - 1] - hashs[0][j][i - 1];
                va += HMOD;
                va %= HMOD;
                va = va * power(tp[i - 1], HMOD - 2, HMOD);
                va %= HMOD;
                ll vb = hashs[1][j][n];
                vb += HMOD;
                vb %= HMOD;
              //  cerr << va << ' ' << vb << '\n';
                if(va != vb){
                    flag = true;
                    break;
                }
            }
            x = x + (bita ^ bitb) * (1 << j);
        }
        if(flag == false){
            cout << i - 1 << ' ' << x << '\n';
        }
    }
    #ifdef LOCAL
    cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
    #endif
}


Measured memory_bytes: 329216