1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//~ while (clock()<=69*CLOCKS_PER_SEC)
//~ #pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("O3")
//~ #pragma GCC optimize("Ofast")
//~ #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
//~ #pragma GCC optimize("unroll-loops")

#include <bits/stdc++.h>

using namespace std;

using ll=long long;
using ld=long double;
using pii=pair<int, int>;
using pll=pair<ll, ll>;
using vi=vector<int>;
using vll=vector<ll>;

template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<" = "<<h<<endl; }
#ifdef LOCAL
#define _upgrade ios_base::sync_with_stdio(0);
#define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__);
#else
#define _upgrade ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define debug(...) 98;
#define cerr if(0) cout
#endif

#define pb push_back
#define mp make_pair
#define all(x) x.begin(),x.end()
#define sz(x) ((int)(x).size())
#define fi first
#define se second

#define erase_duplicates(x) sort(all(x)), (x).resize(distance((x).begin(), unique(all(x))));

#define watch(x) cout << (#x) << " is " << (x) << endl;

#define pow2(x) ((x)*(x))
#define mod(x, m) ((((x) % (m)) + (m)) % (m))
#define max3(a, b, c) max(a, max(b, c))
#define min3(a, b, c) min(a, min(b, c))

#define REP(i, a, b) for(int i = a; i <= b; ++i)
#define REPV(i, b, a) for(int i = b; i >= a; --i)

const double m_pi = acos(-1.0);
const int int_max = 0x3f3f3f3f;
const int M7 = 1000*1000*1000+7;
const int M9 = 1000*1000*1000+9;

int tab[200'001];
int myPos[200'001];

int checked[200'001];
ll result[200'001];


int main() {
    _upgrade
    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    cout<<fixed<<setprecision(15);

    int n, k;cin>>n>>k;

    REP(i,0,1){
        REP(j,0,n-1){
            cin>>tab[i*n + j];
            myPos[tab[i*n + j]] = i*n + j;
        }
    }

    REP(i, 1, 2*n) {
        REP(j, i, 2*n) {
            int kkk = 0;
            queue<int> q;
            REP(ii,i,j) {
                int pos = myPos[ii];
                if(checked[pos])continue;
                ++kkk;
                q.push(pos);
                while(!q.empty()) {
                    pos = q.front();
                    q.pop();
                    if (pos >= 2*n) continue;
                    if (pos < 0) continue;
                    if(checked[pos]) continue;
                    if(tab[pos] >= i && tab[pos] <= j) {
                        checked[pos]=1;
                        q.push(pos+n);
                        q.push(pos-n);
                        if(pos == n -1 || pos == n+n-1) {
                            q.push(pos-n+1);
                        } else {
                            q.push(pos+1);
                        }
                        if(pos == 0 || pos == n) {
                            q.push(pos+n-1);
                        } else {
                            q.push(pos-1);
                        }
                    }
                }
            }
            REP(ii,i,j) {checked[myPos[ii]]=0;}
            ++result[kkk];
            // cout <<i<<" "<<j<<" "<<kkk<<endl;
        }
    }

    REP(i, 1, k) {
        cout << result[i] << " ";
    }

    return 0;
}




/*
    __builtin_popcount count total set bits on a given integer
    (use __builtin_popcountll for long long).


*/