CODE:
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 30
#define INF 0X3F3F3F3F
int G[MAXN][MAXN];
bool vis[MAXN][MAXN];
int ans, n, m;
void init()
{
memset(G, 0, sizeof(G));
ans = -INF;
}
void dfs(int u, int cur)
{
if(cur > ans) ans = cur;
for(int v = 0; v < n; v++)
{
if(G[u][v] && !vis[u][v] && !vis[v][u])
{
vis[u][v] = vis[v][u] = 1;
dfs(v, cur+1);
vis[u][v] = vis[v][u] = 0;
}
}
}
int main()
{
while(scanf("%d%d", &n, &m) && ( n || m))
{
init();
while(m--)
{
int u, v;
scanf("%d%d", &u, &v);
G[u][v] = G[v][u] = 1;
}
for(int v = 0; v < n; v++)
{
memset(vis, 0, sizeof(vis));
dfs(v, 0);
}
printf("%d\n", ans);
}
return 0;
}
#include <cstdlib>
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 30
#define INF 0X3F3F3F3F
int G[MAXN][MAXN];
bool vis[MAXN][MAXN];
int ans, n, m;
void init()
{
memset(G, 0, sizeof(G));
ans = -INF;
}
void dfs(int u, int cur)
{
if(cur > ans) ans = cur;
for(int v = 0; v < n; v++)
{
if(G[u][v] && !vis[u][v] && !vis[v][u])
{
vis[u][v] = vis[v][u] = 1;
dfs(v, cur+1);
vis[u][v] = vis[v][u] = 0;
}
}
}
int main()
{
while(scanf("%d%d", &n, &m) && ( n || m))
{
init();
while(m--)
{
int u, v;
scanf("%d%d", &u, &v);
G[u][v] = G[v][u] = 1;
}
for(int v = 0; v < n; v++)
{
memset(vis, 0, sizeof(vis));
dfs(v, 0);
}
printf("%d\n", ans);
}
return 0;
}