rt
#include <iostream>
#include <stdio.h>
#include <vector>
#include <bitset>
#include <deque>
#include <string.h>
using namespace std;
struct AB{
char front[2],back[2];
double len;
}str[100001];
string s;
deque <int> que;
vector <int> st[100001];
int n,kf,kb,to,w,ans;
double dis[100001];
int cnt[100001];
bitset <100001> inque;
double l,r,mid;
bool spfa(int x,double v)
{
inque[x] = 1;
for(int i=0;i<st[x].size();i++)
{
to = st[x][i];
if(dis[to]<dis[x]+str[st[x][i]].len-v)
{
dis[to] = dis[x]+str[st[x][i]].len-v;
if(inque[to])
return true;
else if(spfa(to,v))
return true;
}
}
inque[x] = 0;
return false;
}
bool check()
{
inque.reset();
for(int i=1;i<=n;i++)
dis[i] = 0;
for(int i=1;i<=n;i++)
if(spfa(i,mid))
return true;
return false;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(int i=1;i<=n;i++)
{
cin >> s;
if(s.size()==1)
continue;
str[i].front[0] = s[0];
str[i].front[1] = s[1];
str[i].back[0] = s[s.size()-2];
str[i].back[1] = s[s.size()-1];
str[i].len = s.size();
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
kb = (str[i].back[0]-'a')*26+(str[i].back[1]-'a');
kf = (str[j].front[0]-'a')*26+(str[j].front[1]-'a');
if(kb==kf)
st[i].push_back(j);
}
}
l = 0;
r = 10005;
while(r-l>0.001)
{
mid = (r+l)/2;
if(check())
l = mid;
else
r = mid;
}
if(l<0.001)
printf("No solution.");
else
printf("%lf\n",l);
for(int i=1;i<=n;i++)
while(!st[i].empty())
st[i].pop_back();
}
return 0;
}