template<class S>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
a[k]= aval;
}
template<class S, class T>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval, T b[], const T bval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
for(i=sz-1;i>k;i--){
b[i]= b[i-1];
}
a[k]= aval;
b[k]= bval;
}
template<class S, class T, class U>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval, T b[], const T bval, U c[], const U cval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
for(i=sz-1;i>k;i--){
b[i]= b[i-1];
}
for(i=sz-1;i>k;i--){
c[i]= c[i-1];
}
a[k]= aval;
b[k]= bval;
c[k]= cval;
}
template<class S, class T, class U, class V>inlinevoid arrInsert(constint k, int&sz, S a[], const S aval, T b[], const T bval, U c[], const U cval, V d[], const V dval){
int i;
sz++;
for(i=sz-1;i>k;i--){
a[i]= a[i-1];
}
for(i=sz-1;i>k;i--){
b[i]= b[i-1];
}
for(i=sz-1;i>k;i--){
c[i]= c[i-1];
}
for(i=sz-1;i>k;i--){
d[i]= d[i-1];
}
a[k]= aval;
b[k]= bval;
c[k]= cval;
d[k]= dval;
}
struct graph{
int N;
int*es;
int**edge;
void setDirectEdge(int N__, int M, int A[], int B[], void**mem =&wmem){
int i;
N = N__;
walloc1d(&es, N, mem);
walloc1d(&edge, N, mem);
walloc1d(&edge[0], M, mem);
for(i=(0);i<(N);i++){
es[i]=0;
}
for(i=(0);i<(M);i++){
es[A[i]]++;
}
for(i=(0);i<(N);i++){
walloc1d(&edge[i], es[i], mem);
}
for(i=(0);i<(N);i++){
es[i]=0;
}
for(i=(0);i<(M);i++){
edge[A[i]][es[A[i]]++]= B[i];
}
}
void getDist(int root, int res[], void*mem = wmem){
int i;
int j;
int k;
int*q;
int s;
int z;
walloc1d(&q, N, &mem);
for(i=(0);i<(N);i++){
res[i]=-1;
}
res[root]=0;
s=0;
z=1;
q[0]=root;
while(z){
i=q[s++];
z--;
for(j=(0);j<(es[i]);j++){
k=edge[i][j];
if(res[k]>=0){
continue;
}
res[k]=res[i]+1;
q[s+z++]=k;
}
}
}
}
;
#define main dummy_main
int main(){
wmem = memarr;
return0;
}
#undef main
graph g;
int n;
int m;
int a[10000];
int b[10000];
int dist[100];
class Solution{
public:
vector<string> watchedVideosByFriends(vector<vector<string>>& v, vector<vector<int>>& f, int id, int level){
int i;
vector<string> res;
map<string,int> mp;
vector< pair<int,string>> tmp;
dummy_main();
n = v.size();
m =0;
for(i=(0);i<(n);i++){
int j;
for(j=(0);j<(f[i].size());j++){
arrInsert(m,m,a,i,b,f[i][j]);
}
}
g.setDirectEdge(n,m,a,b);
g.getDist(id,dist);
for(i=(0);i<(n);i++){
if(dist[i]== level){
int j;
for(j=(0);j<(v[i].size());j++){
mp[v[i][j]]++;
}
}
}
for(auto i : mp){
tmp.push_back( make_pair(i.second, i.first));
}
sort(tmp.begin(), tmp.end());
for(auto i : tmp){
res.push_back(i.second);
}
return res;
}
}
;
// cLay varsion 20200112-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// graph g;
// int n, m, a[10000], b[10000];
// int dist[100];
//
// class Solution {
// public:
// vector<string> watchedVideosByFriends(vector<vector<string>>& v, vector<vector<int>>& f, int id, int level) {
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status