```  1 type node=record
2        po,next:longint;
3      end;
4
5 var e:array[0..4000010] of node;
6     l:array[0..100010] of node;
7     p,q,ans:array[0..100010] of longint;
8     can,v:array[0..100010] of boolean;
9     s,i,n,m,len,x,y:longint;
10
12   begin
13     inc(len);
14     e[len].po:=y;
15     e[len].next:=p[x];
16     p[x]:=len;
17   end;
18
19 procedure swap(var a,b:longint);
20   var c:longint;
21   begin
22     c:=a;
23     a:=b;
24     b:=c;
25   end;
26
27 procedure sort(l,r:longint);
28   var i,j,x:longint;
29   begin
30     i:=l;
31     j:=r;
32     x:=ans[(l+r) shr 1];
33     repeat
34       while ans[i]<x do inc(i);
35       while x<ans[j] do dec(j);
36       if not(i>j) then
37       begin
38         swap(ans[i],ans[j]);
39         inc(i);
40         dec(j);
41       end;
42     until i>j;
43     if l<j then sort(l,j);
44     if i<r then sort(i,r);
45   end;
46
47 procedure del(i:longint);
48   begin
49     l[l[i].po].next:=l[i].next;
50     if l[i].next<>-1 then l[l[i].next].po:=l[i].po;
51   end;
52
53 procedure bfs;
54   var f,r,i,t:longint;
55   begin
56     while l[0].next<>-1 do
57     begin
58       f:=1;
59       r:=1;
60       v[l[0].next]:=true;
61       q[1]:=l[0].next;
62       del(l[0].next);
63       t:=1;
64       while f<=r do
65       begin
66         x:=q[f];
67         i:=p[x];
68         while i<>0 do
69         begin
70           can[e[i].po]:=true;
71           i:=e[i].next;
72         end;
73         i:=l[0].next;
74         while i>-1 do
75         begin
76           if not v[i] and not can[i] then
77           begin
78             inc(r);
79             q[r]:=i;
80             del(i);
81             inc(t);
82             v[i]:=true;
83           end;
84           i:=l[i].next;
85         end;
86         i:=p[x];
87         while i<>0 do
88         begin
89           can[e[i].po]:=false;
90           i:=e[i].next;
91         end;
92         inc(f);
93       end;
94       inc(s);
95       ans[s]:=t;
96     end;
97   end;
98
99 begin
101   for i:=1 to m do
102   begin
106   end;
107   for i:=1 to n do
108   begin
109     l[i].po:=i-1;
110     l[i-1].next:=i;
111   end;
112   l[n].next:=-1;
113   bfs;
114   sort(1,s);
115   writeln(s);
116   for i:=1 to s do
117     write(ans[i],' ');
118   writeln;
119 end.```
1098
``` 1 type node=record
2        po,next:longint;
3      end;
4
5 var e:array[0..2000010] of node;
6     l:array[0..100010] of node;
7     p:array[0..100010] of longint;
8     can:array[0..100010] of boolean;
9     i,n,m,x,y,len:longint;
10
12   begin
13     inc(len);
14     e[len].po:=y;
15     e[len].next:=p[x];
16     p[x]:=len;
17   end;
18
19 procedure del(i:longint);
20   begin
21     l[l[i].po].next:=l[i].next;
22     if l[i].next<>-1 then l[l[i].next].po:=l[i].po;
23   end;
24
25 procedure dfs(x:longint);
26   var i,j:longint;
27   begin
28     writeln(x);
29     del(x);
30     i:=p[x];
31     while i<>0 do
32     begin
33       can[e[i].po]:=true;
34       i:=e[i].next;
35     end;
36     i:=l[0].next;
37     while i>-1 do
38     begin
39       if not can[i] then
40       begin
41         j:=p[x];
42         while j<>0 do
43         begin
44           can[e[j].po]:=false;
45           j:=e[j].next;
46         end;
47         dfs(i);
48         exit;
49       end;
50       i:=l[i].next;
51     end;
52   end;
53
54 begin
56   for i:=1 to m do
57   begin