#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef pair P; typedef long long ll; typedef long double ld; const int inf=1e9+7; const ll longinf=1LL<<60; #define REP(i,m,n) for(ll i=(int)(m) ; i < (int) (n) ; ++i ) #define rep(i,n) REP(i,0,n) #define F first #define S second constexpr char ln = '\n'; const int mx=100010; const ll mod=1e9+7; struct UnionFind { vector par,sizes; // par[i]:iの親の番号(ex)par[3]=2 : 3の親が2 UnionFind(int n) : par(n),sizes(n,1) { //最初は全てが根であるとして初期化 for(int i=0; i> n >> a >> b; vector x(n); rep(i,n){ cin >> x[i]; } UnionFind uf(n); for(int i=0; ij; t--){ if(uf.check(j,t)){ break; } else { uf.unite(j,t); } } } rep(i,n){ cout << uf.size(i) << ln; } return 0; }