#include <bits/stdc++.h>
        using namespace std;
        #define int long long
const int MAX = 510000;
const int MOD = 1000000007;
int num[101];
vector<int> hen[101];
bool used[101];
void dfs(int a,int t){
        num[a]=t;
        for(int i=0;i<hen[a].size();i++){
                if(!used[hen[a][i]]){
                        used[hen[a][i]]=true;
                        dfs(hen[a][i],t+1);
                }
        }
}
void dfs2(int a,int t){
        num[a]=max(num[a],t);
        for(int i=0;i<hen[a].size();i++){
                if(!used[hen[a][i]]){
                        used[hen[a][i]]=true;
                        dfs2(hen[a][i],t+1);
                }
        }
}
     signed main(){
           int n;
           cin>>n;
         int a,b;
         for(int i=0;i<n-1;i++){
                 cin>>a>>b;a--;b--;
                 hen[a].push_back(b);
                 hen[b].push_back(a);
         }
         int m=0,l;
         used[0]=true;
         dfs(0,0);
         for(int i=0;i<n;i++){
                 if(m<num[i]){
                         m=num[i];
                         l=i;
                 }
         }
         fill(used,used+n,false);
         used[l]=true;
      
         dfs(l,0);
         m=0;
       for(int i=0;i<n;i++){
                 if(m<num[i]){
                         m=num[i];
                         l=i;
                 }
         }
    
                fill(used,used+n,false);
         used[l]=true;
 //for(int i=0;i<n;i++)cerr<<num[i]<<' ';//
   //     cerr<<endl;
         
         dfs2(l,0);
         m=0;
       for(int i=0;i<n;i++){
                 if(m<num[i]){
                         m=num[i];
                         l=i;
                 }
         } 
       //  for(int i=0;i<n;i++)cerr<<num[i]<<' ';
      //  cerr<<endl;
     
       int p=-1;vector<int> q;
       for(int i=0;i<n;i++){
               if(num[i]==(m+1)/2){
                       if(p==-1)p=i;
                       else q.push_back(i);
               }
             
       }
       if(m%2==0)for(int i=0;i<hen[p].size();i++)q.push_back(hen[p][i]);
     //  //cerr<<p<<endl;
         //cerr<<num[p]<<endl;
    //     for(int i=0;i<n;i++)//cerr<<num[i]<<' ';
         //cerr<<endl;
       int ans=-1,ans2;
       vector<int> r;
       for(int j=0;j<q.size();j++){
               r.clear();
               fill(used,used+n,false);
               used[p]=true;
               used[q[j]]=true;
               dfs(p,0);
               dfs(q[j],0);
               for(int i=0;i<n;i++){
                       while(r.size()<=num[i])r.push_back(1);
                    if(r[num[i]]<hen[i].size()-1)r[num[i]]=hen[i].size()-1;
               }
               ans2=1;
               for(int i=0;i<r.size();i++){ans2*=r[i];}//cerr<<r[i]<<' ';}
             //  cerr<<2*ans2<<' '<<q[j]<<endl;
               if(ans==-1)ans=2*ans2;
               else ans=min(ans,2*ans2);
        r.clear();
       }
       if(m%2==0){
               r.clear();
                fill(used,used+n,false);
               used[p]=true;
             
               dfs(p,0);
                for(int i=0;i<n;i++){
                       while(r.size()<=num[i])r.push_back(1);
                        if(r[num[i]]<hen[i].size()-1)r[num[i]]=hen[i].size()-1;
               }
               ans2=r[0]+1;
           
              
               for(int i=1;i<r.size();i++)ans2*=r[i];
              // cerr<<ans2<<endl;
               if(ans==-1)ans=ans2;
                else ans=min(ans,ans2);

       }
cout<<m/2 +1<<' '<<ans;

        
}

        


Measured memory_bytes: 256