#include <iostream>
using namespace std;
int testCase; //테스트 케이스 수
int sCount; // 학생의 수
int fCount; // 친구쌍의 수
bool areFriends[10][10];
// taken[i] = i번째 학생이 짝을 이미 찾았으면 true, 아니면 false
int countPairings(bool taken[10]){
//남은 학생들 중 가장 번호가 빠른 학생을 찾는다.
int firstFree = -1;
for(int i = 0; i < sCount; ++i) {
if(!taken[i]) {
firstFree = i;
break;
}
}
//기저 사례 : 모든 학생이 짝을 찾았으면 한 가지 방법을 찾았으니 종료한다.
if(firstFree == -1) return 1;
int ret = 0;
// 이 학생과 짝지을 학생을 결정한다.
for(int pairWith = firstFree+1; pairWith < sCount; ++pairWith){
if(!taken[pairWith] && areFriends[firstFree][pairWith]){
taken[firstFree] = taken[pairWith] = true;
ret += countPairings(taken);
taken[firstFree] = taken[pairWith] = false;
}
}
return ret;
}
int main(void)
{
int x, y;
bool taken[10];
int i, tc;
cin>>testCase;
int * result = new int[testCase];
tc = testCase;
i=0;
while(testCase >0){
cin>>sCount;
cin>>fCount;
for(int i=0; i<fCount; ++i)
{
cin>>x>>y;
areFriends[x][y] = true;
areFriends[y][x] = true;
}
result[i] = countPairings(taken);
testCase--;
i++;
for(int i=0; i<10; ++i)
for(int j=0; j<10; j++)
areFriends[i][j] = false;
for(int i=0; i<10; ++i)
taken[i] = false;
}
for(int i=0; i<tc; ++i)
cout<<result[i]<<endl;
return 0;
}
ghkd0205
10년 전