#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int inf=1<<30; const ll INF=1LL<<62; typedef pair P; typedef pair PP; const ll MOD=998244353; /* dp[i][j][k][S]=人iがj回の移動で公園kに辿り着く. 通った公園の集合がS (Sのbitの数)-1=j なので dp[i][k][S]で良い */ bool dp[15][15][1<<15]; int main(){ int N,M,K; cin>>N>>M>>K; vector X(K); for(int k=0;k>X[k]; X[k]--; } vector> G(N); for(int i=0;i>u>>v; u--;v--; G[u].push_back(v); G[v].push_back(u); } for(int i=0;i ans(N+1,all_bit);//N回の移動で友達0~K-1すべてについて 訪れることが可能な公園の集合 for(int i=0;i visit(N+1,0);//visit[t]=t回目の移動で人iが訪れることができる公園の集合 for(int S=0;S<(1<>e)&1) continue; //まだ公園eを訪れていない visit[__builtin_popcount(S|(1<0){ //cout<<"ans["<(ans[t])<