#include<bits/stdc++.h>
#define int long long
using namespace std;
namespace Testify{
inline int read(){
int f(1),x(0);
char ch=getchar();
for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-1;
for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
return f*x;
}
inline void WritE(int x){
if(x<0) putchar('-'),x=-x;
if(x>9) WritE(x/10);
putchar(x%10+48);
}
inline void write(int x){
WritE(x);
puts("");
}
inline void Write(int x){
WritE(x);
putchar(' ');
}
}
using namespace Testify;
int n;
const int N=55;
int x,y,now[N],ans,Ans[N];
bool E[N][N];
mt19937 rd(chrono::system_clock::now().time_since_epoch().count());
inline int radom(int l,int r){
return rd()%(r-l+1)+l;
}
inline int energy(){
for(register int i=1;i<=n;i++){
for(register int j=1;j<i;j++){
if(!E[now[i]][now[j]]){
return i-1;
}
}
}
return n;
}
inline void SA(){
double T=3000;
while(T>1e-15){
int ra=radom(1,n),rb=radom(1,n);
if(ra==rb){
continue;
}
swap(now[ra],now[rb]);
int e=energy();
double delta=e-ans;
if(delta>0){
ans=e;
}
else if(exp(delta/T)*RAND_MAX<radom(0,RAND_MAX)){
swap(now[ra],now[rb]);
}
T*=0.999;
}
}
signed main(void){
n=read();
for(register int i=1;i<=n;i++){
x=read(),y=read();
now[i]=i;
E[x][y]=E[y][x]=true;
}
ans=energy();
while((double)clock()/CLOCKS_PER_SEC<0.99){
SA();
}
write(ans);
return 0;
}
呜呜呜