#include <iostream>
#include <algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<vector>
#include<iomanip>
#define sqr(x) (x)*(x)
#define llx(c,itr) for(__typeof((c).begin()) itr=(c).begin();itr!=(c).end();itr++)
using namespace std;
long long n,m,i,ii,j,k,ans=1ll<<61,ans2,dep[105],x,y,ss,mx[105];
vector<long long> bi[105];
void dfs(int x,int fa)
{
	mx[dep[x]]=max(mx[dep[x]],(long long)bi[x].size()-(fa!=0));
	llx(bi[x],it)
	{
		if (*it==fa) continue;
		dep[*it]=dep[x]+1;
		dfs(*it,x);
	}
}
int main()
{
	ios_base::sync_with_stdio(0);
	cin>>n;
	for (i=1;i<n;i++)
	{
		 cin>>x>>y;
		 bi[x].push_back(y);
		 bi[y].push_back(x);
	}
	for (i=1;i<=n;i++)
	{
		dep[i]=1;
		memset(mx,0,sizeof(mx));
		dfs(i,0);
		for (j=1;mx[j];j++);
		if (j<ans)
		{
			ans=j;
			ans2=1ll<<61;
		}
		if (j==ans)
		{
			ss=1;
			for (k=1;k<j;k++) ss*=mx[k];
			if (ss<ans2) ans2=ss;
		}
	}
	for (i=1;i<=n;i++)
	{
		llx(bi[i],it)
		{
			ii=*it;
			dep[i]=dep[ii]=1;
			memset(mx,0,sizeof(mx));
			dfs(i,ii);
			dfs(ii,i);
			for (j=1;mx[j];j++);
			if (j<ans)
			{
				ans=j;
				ans2=1ll<<61;
			}
			if (j==ans)
			{
				ss=2;
				for (k=1;k<j;k++) ss*=mx[k];
				if (ss<ans2) ans2=ss;
			}
		}
	}
	cout<<ans<<' '<<ans2<<endl;
	return 0;
}