#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, a[N], b[N], posa[N], posb[N], dif[N], ans, ord[N], t1;
multiset<int> rig, lef;
int abss(const int i) { return i < 0 ? -i : i; }
bool cmp(int i, int j) { return dif[i] < dif[j]; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    posa[a[i]] = i;
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &b[i]);
    posb[b[i]] = i;
  }
  ans = n;
  for (int i = 1; i <= n; ++i) {
    ans = min(ans, abss(posa[i] - posb[i]));
    dif[i] = posb[i] - posa[i];
    if (dif[i] > 0) {
      rig.insert(dif[i]);
    } else {
      lef.insert(-dif[i]);
    }
    ord[i] = i;
  }
  sort(ord + 1, ord + 1 + n, cmp);
  t1 = 1;
  printf("%d\n", ans);
  for (int i = 2; i <= n; ++i) {
    lef.erase(lef.find(posa[b[i - 1]] - i + 1));
    rig.insert(n - posa[b[i - 1]] + i - 1);
    while (rig.size() > 0 && *rig.begin() - i + 1 == 0) {
      rig.erase(rig.find(*rig.begin()));
      lef.insert((int)(-i + 1));
    }
    ans = min(*lef.begin() + i - 1,
              rig.size() > 0 ? *rig.begin() - i + 1 : n + 1);
    printf("%d\n", ans);
  }
  return 0;
}
