#include using namespace std; #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define RFOR(i,a,b) for (int i=(b)-1;i>=(a);i--) #define REP(i,n) for (int i=0;i<(n);i++) #define rep(i,n) for (int i=0;i<(n);i++) #define RREP(i,n) for (int i=(n)-1;i>=0;i--) #define ALL(a) (a).begin(),(a).end() #define all(a) (a).begin(),(a).end() #define EXIST(s,e) (find(all(s),(e))!=(s).end()) #define exist(s,e) (find(all(s),(e))!=(s).end()) #define INF (1<<25) #define ll long long #define vs vector #define vi vector #define vi2 vector> #define vll vector #define vll2 vector> #define vb vector #define v2Resize(s,x,y) s.resize(x); REP(i,s.size()) s[i].resize(y); #define v2Fill(s,v) REP(i,s.size()) fill(all(s[i]),v); #define V vector #define Pii pair #define P pair; #define in(x) cin>>x; #define in1(x,m) REP(i,m){int tmp; cin>>tmp; x.push_back(tmp);} #define in2(v2,x,y) REP(i,x) REP(j,y) cin>>v2[i][j]; #define OUT2(v2) REP(i,v2.size()){ REP(j,v2[i].size()){ cout< 0) { dp[j] = max(dp[j], dp[i] + 1); } } } cout << *max_element(all(dp)) << endl; }