#include <stdio.h>
#include<vector>
using namespace std;
vector<int>v[100005];//but why do you create the array size here?array size is not needed-isnt that the main advantage of vector?or is it a 2d array??
int length;
bool vis[100005];//is bool another datatype?
void dfs(int i)
{
for(int j=0;j<v[i].size();j++)//v[i].size() means??size() is a function??
{
if(!vis[v[i][j]])
{
length++;
vis[v[i][j]]=1;
dfs(v[i][j]);
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int x,y,n,q,count=0;
scanf("%d%d",&n,&q);
while(q--)
{
scanf("%d%d",&x,&y);
v[x-1].push_back(y-1);
v[y-1].push_back(x-1);
}
long long unsigned sum=1;
for(int i=0;i<n;i++)
{
if(!vis[i])
{
vis[i]=1;
count++;
length=1;
for(int j=0;j<v[i].size();j++)
{
if(!vis[v[i][j]])
{
vis[v[i][j]]=1;
dfs(v[i][j]);
length++;
}
}
sum*=length;
sum%=1000000007;
}
}
printf("%d %llu\n",count,sum);
for(int i=0;i<n;vis[i++]=0)
v[i].clear();
}
return 0;
}
ICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGU8dmVjdG9yPgogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHZlY3RvcjxpbnQ+dlsxMDAwMDVdOy8vYnV0IHdoeSBkbyB5b3UgY3JlYXRlIHRoZSBhcnJheSBzaXplIGhlcmU/YXJyYXkgc2l6ZSBpcyBub3QgbmVlZGVkLWlzbnQgdGhhdCB0aGUgbWFpbiBhZHZhbnRhZ2Ugb2YgdmVjdG9yP29yIGlzIGl0IGEgMmQgYXJyYXk/PwogICAgaW50IGxlbmd0aDsKICAgIGJvb2wgdmlzWzEwMDAwNV07Ly9pcyBib29sIGFub3RoZXIgZGF0YXR5cGU/CiAgICB2b2lkIGRmcyhpbnQgaSkKICAgIHsKICAgIGZvcihpbnQgaj0wO2o8dltpXS5zaXplKCk7aisrKS8vdltpXS5zaXplKCkgbWVhbnM/P3NpemUoKSBpcyBhIGZ1bmN0aW9uPz8KICAgIHsKICAgIGlmKCF2aXNbdltpXVtqXV0pCiAgICB7CiAgICBsZW5ndGgrKzsKICAgIHZpc1t2W2ldW2pdXT0xOwogICAgZGZzKHZbaV1bal0pOwogICAgfQogICAgfQogICAgfQogICAgaW50IG1haW4oKQogICAgewogICAgaW50IHQ7CiAgICBzY2FuZigiJWQiLCZ0KTsKICAgIHdoaWxlKHQtLSkKICAgIHsKICAgIGludCB4LHksbixxLGNvdW50PTA7CiAgICBzY2FuZigiJWQlZCIsJm4sJnEpOwogICAgd2hpbGUocS0tKQogICAgewogICAgc2NhbmYoIiVkJWQiLCZ4LCZ5KTsKICAgIHZbeC0xXS5wdXNoX2JhY2soeS0xKTsKICAgIHZbeS0xXS5wdXNoX2JhY2soeC0xKTsKICAgIH0KICAgIGxvbmcgbG9uZyB1bnNpZ25lZCBzdW09MTsKICAgIGZvcihpbnQgaT0wO2k8bjtpKyspCiAgICB7CiAgICBpZighdmlzW2ldKQogICAgewogICAgdmlzW2ldPTE7CiAgICBjb3VudCsrOwogICAgbGVuZ3RoPTE7CiAgICBmb3IoaW50IGo9MDtqPHZbaV0uc2l6ZSgpO2orKykKICAgIHsKICAgIGlmKCF2aXNbdltpXVtqXV0pCiAgICB7CiAgICB2aXNbdltpXVtqXV09MTsKICAgIGRmcyh2W2ldW2pdKTsKICAgIGxlbmd0aCsrOwogICAgfQogICAgfQogICAgc3VtKj1sZW5ndGg7CiAgICBzdW0lPTEwMDAwMDAwMDc7CiAgICB9CiAgICB9CiAgICBwcmludGYoIiVkICVsbHVcbiIsY291bnQsc3VtKTsKICAgIGZvcihpbnQgaT0wO2k8bjt2aXNbaSsrXT0wKQogICAgdltpXS5jbGVhcigpOwogICAgfQogICAgcmV0dXJuIDA7CiAgICB9IA==