#include <iostream>
#include <cstdio>
#include <sstream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
string str;
struct node{
int fst;
int ed;
int idx;
}arr[1010];
int L[17][1010];
int RANK[1010];
int lcp[1010];
int FoundAtIndex;
int cnt;
string resStr;
bool cmp(node a,node b)
{
return (a.fst==b.fst?(a.ed<b.ed?1:0):(a.fst<b.fst?1:0));
}
void suffixArray()
{
for(int i=0;i<str.size();i++)
L[0][i]=str[i]-'A';
int stp=1;
for(int cnt=1;cnt/2<str.size();cnt*=2,stp++)
{
for(int i=0;i<str.size();i++)
{
arr[i].fst=L[stp-1][i];
arr[i].ed=(i+cnt)<str.size()?L[stp-1][i+cnt]:-1;
arr[i].idx=i;
}
sort(arr,arr+str.size(),cmp);
for(int i=0;i<str.size();i++)
{
L[stp][arr[i].idx]=(i>0 && arr[i-1].fst==arr[i].fst && arr[i-1].ed==arr[i].ed)?L[stp][arr[i-1].idx]:i;
}
}
}
int isLess(string a,string b)
{
for(int i=0;i<a.size();i++)
{
if((a[i]-'0')<(b[i]-'0'))
return 1;
if((a[i]-'0')>(b[i]-'0'))
return -1;
}
return 0;
}
int MaxLCP()
{
for(int i=0;i<str.size();i++)
{
lcp[i]=0;
RANK[arr[i].idx]=i;
}
string tmp;
int k=0,j;
int len=str.size();
int mx=0;
cnt=0;
for(int i=0;i<len;i++,k?k--:0)
{
if(RANK[i]==str.size()-1)
continue;
i = arr[RANK[i]].idx;
j = arr[RANK[i]+1].idx;
while(i+k<len && j+k<len && str[i+k]==str[j+k])
k+=1;
lcp[RANK[i]]=k;
if(mx<k)
{
mx=k;
FoundAtIndex=i;
cnt=2;
resStr="";
for(int l=i;l<i+k;l++)
resStr.append(1u,str[l]);
}
else if(mx==k)
{
tmp="";
for(int l=i;l<i+k;l++)
tmp.append(1u,str[l]);
int f=isLess(tmp,resStr);
if(f==1)
{
resStr=tmp;
cnt=2;
}
else if(f==0)
cnt+=1;
}
}
return mx;
}
int main()
{
int n,mxLength;
scanf("%d",&n);
while(n--)
{
cin>>str;
suffixArray();
mxLength = MaxLCP();
if(mxLength==0)
{
printf("No repetitions found!\n");
}
else
{
cout<<resStr<<" "<<cnt<<"\n";
}
}
return 0;
}