const fi= '' ;
nmax= 40000 ;
mmax= 100000 ;
type
data= longint ;
data1= longint ;
var
f: text;
n, m: data;
head: array [ 0 .. nmax + 1 ] of data1;
adj: array [ 0 .. mmax * 2 ] of data1;
loaidinh, DD: array [ 0 .. nmax ] of boolean ;
A, B: array [ 0 .. 2 * mmax] of data1;
procedure sort( l, r: longint ) ;
var
i, j: longint ;
x, y: data1;
begin
i: = l;
j: = r;
x: = a[ ( l+ r) div 2 ] ;
repeat
while a[ i] <x do
inc( i) ;
while x<a[ j] do
dec( j) ;
if not ( i>j) then
begin
y: = a[ i] ; a[ i] : = a[ j] ; a[ j] : = y;
y: = b[ i] ; b[ i] : = b[ j] ; b[ j] : = y;
inc( i) ;
j: = j- 1 ;
end ;
until i>j;
if l<j then
sort( l, j) ;
if i<r then
sort( i, r) ;
end ;
procedure docfile;
var i, j: data;
u, v: data1;
dem: data;
begin
assign( f, fi) ; reset( f) ;
readln ( f, n, m) ;
head[ 0 ] : = 0 ;
for i: = 1 to m do
begin
readln ( f, u, v) ;
A[ ( i- 1 ) * 2 + 1 ] : = u;
B[ ( i- 1 ) * 2 + 1 ] : = v;
A[ ( i- 1 ) * 2 + 2 ] : = v;
B[ ( i- 1 ) * 2 + 2 ] : = u;
end ;
close( f) ;
sort( 1 , 2 * m) ;
head[ 0 ] : = 0 ;
for i: = 1 to 2 * m do
begin
adj[ i] : = b[ i] ;
inc( head[ a[ i] ] ) ;
end ;
for i: = 1 to n do
head[ i] : = head[ i- 1 ] + head[ i] ;
end ;
procedure init;
var i: data;
begin
for i: = 1 to n do dd[ i] : = false ;
end ;
procedure dfs( i: data) ;
var j: data;
begin
if loaidinh[ i] then
exit;
dd[ i] : = true ;
for j: = head[ i- 1 ] + 1 to head[ i] do
if not ( dd[ adj[ j] ] ) then
dfs( adj[ j] ) ;
end ;
function STPLT: data;
var i: data;
s: data;
begin
s: = 0 ;
init;
for i: = 1 to n do
if not dd[ i] then
begin
inc( s) ;
dfs( i) ;
end ;
exit( s) ;
end ;
procedure xuli;
var i: data;
begin
for i: = 1 to n do
loaidinh[ i] : = false ;
for i: = 1 to n do
begin
loaidinh[ i] : = true ;
writeln ( stplt- 1 ) ;
loaidinh[ i] : = false ;
end ;
end ;
begin
docfile;
xuli;
Y29uc3QgICBmaT0nJzsKICAgICAgICBubWF4PTQwMDAwOwogICAgICAgIG1tYXg9MTAwMDAwOwp0eXBlCiAgICAgICAgZGF0YT1sb25naW50OwogICAgICAgIGRhdGExPWxvbmdpbnQ7CnZhcgogICAgICAgIGY6dGV4dDsKICAgICAgICBuLG06ZGF0YTsKICAgICAgICBoZWFkOmFycmF5WzAuLm5tYXgrMV0gb2YgZGF0YTE7CiAgICAgICAgYWRqOmFycmF5WzAuLm1tYXgqMl0gb2YgZGF0YTE7CiAgICAgICAgbG9haWRpbmgsREQ6YXJyYXlbMC4ubm1heF0gb2YgYm9vbGVhbjsKICAgICAgICBBLEI6YXJyYXlbMC4uMiptbWF4XSBvZiBkYXRhMTsKCnByb2NlZHVyZSBzb3J0KGwscjogbG9uZ2ludCk7CiAgICAgIHZhcgogICAgICAgICBpLGo6IGxvbmdpbnQ7CiAgICAgICAgIHgseTpkYXRhMTsKICAgICAgYmVnaW4KICAgICAgICAgaTo9bDsKICAgICAgICAgajo9cjsKICAgICAgICAgeDo9YVsobCtyKSBkaXYgMl07CiAgICAgICAgIHJlcGVhdAogICAgICAgICAgIHdoaWxlIGFbaV08eCBkbwogICAgICAgICAgICBpbmMoaSk7CiAgICAgICAgICAgd2hpbGUgeDxhW2pdIGRvCiAgICAgICAgICAgIGRlYyhqKTsKICAgICAgICAgICBpZiBub3QoaT5qKSB0aGVuCiAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgeTo9YVtpXTsgYVtpXTo9YVtqXTsgYVtqXTo9eTsKICAgICAgICAgICAgICAgIHk6PWJbaV07IGJbaV06PWJbal07IGJbal06PXk7CiAgICAgICAgICAgICAgICBpbmMoaSk7CiAgICAgICAgICAgICAgICBqOj1qLTE7CiAgICAgICAgICAgICBlbmQ7CiAgICAgICAgIHVudGlsIGk+ajsKICAgICAgICAgaWYgbDxqIHRoZW4KICAgICAgICAgICBzb3J0KGwsaik7CiAgICAgICAgIGlmIGk8ciB0aGVuCiAgICAgICAgICAgc29ydChpLHIpOwogICAgICBlbmQ7CgoKCnByb2NlZHVyZSBkb2NmaWxlOwp2YXIgICAgIGksajpkYXRhOwogICAgICAgIHUsdjpkYXRhMTsKICAgICAgICBkZW06ZGF0YTsKYmVnaW4KICAgICAgICBhc3NpZ24oZixmaSk7IHJlc2V0KGYpOwogICAgICAgIHJlYWRsbihmLG4sbSk7CiAgICAgICAgaGVhZFswXTo9MDsKICAgICAgICBmb3IgaTo9MSB0byBtIGRvCiAgICAgICAgICAgICAgICBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICByZWFkbG4oZix1LHYpOwogICAgICAgICAgICAgICAgICAgICAgICBBWyhpLTEpKjIrMV06PXU7CiAgICAgICAgICAgICAgICAgICAgICAgIEJbKGktMSkqMisxXTo9djsKICAgICAgICAgICAgICAgICAgICAgICAgQVsoaS0xKSoyKzJdOj12OwogICAgICAgICAgICAgICAgICAgICAgICBCWyhpLTEpKjIrMl06PXU7CiAgICAgICAgICAgICAgICBlbmQ7CiAgICAgICAgY2xvc2UoZik7CiAgICAgICAgc29ydCgxLDIqbSk7CiAgICAgICAgaGVhZFswXTo9MDsKICAgICAgICBmb3IgaTo9MSB0byAyKm0gZG8KICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIGFkaltpXTo9YltpXTsKICAgICAgICAgICAgICAgICAgICAgICAgaW5jKGhlYWRbYVtpXV0pOwogICAgICAgICAgICAgICAgZW5kOwogICAgICAgIGZvciBpOj0xIHRvIG4gZG8KICAgICAgICAgICAgICAgIGhlYWRbaV06PWhlYWRbaS0xXStoZWFkW2ldOwplbmQ7Cgpwcm9jZWR1cmUgaW5pdDsKdmFyICAgICBpOmRhdGE7CmJlZ2luCiAgICAgICAgZm9yIGk6PTEgdG8gbiBkbyBkZFtpXTo9ZmFsc2U7CmVuZDsKCnByb2NlZHVyZSBkZnMoaTpkYXRhKTsKdmFyICAgICBqOmRhdGE7CmJlZ2luCiAgICAgICAgaWYgbG9haWRpbmhbaV0gdGhlbgogICAgICAgICAgICAgICAgZXhpdDsKICAgICAgICBkZFtpXTo9dHJ1ZTsKICAgICAgICBmb3Igajo9aGVhZFtpLTFdKzEgdG8gaGVhZFtpXSBkbwogICAgICAgICAgICAgICAgaWYgbm90IChkZFthZGpbal1dKSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGRmcyhhZGpbal0pOwplbmQ7CgpmdW5jdGlvbiBTVFBMVDpkYXRhOwp2YXIgICAgIGk6ZGF0YTsKICAgICAgICBzOmRhdGE7CmJlZ2luCiAgICAgICAgczo9MDsKICAgICAgICBpbml0OwogICAgICAgIGZvciBpOj0xIHRvIG4gZG8KICAgICAgICAgICAgICAgIGlmIG5vdCBkZFtpXSB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jKHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRmcyhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgZW5kOwogICAgICAgIGV4aXQocyk7CmVuZDsKCnByb2NlZHVyZSB4dWxpOwp2YXIgICAgIGk6ZGF0YTsKYmVnaW4KICAgICAgICBmb3IgaTo9MSB0byBuIGRvCiAgICAgICAgICAgICAgICBsb2FpZGluaFtpXTo9ZmFsc2U7CgogICAgICAgIGZvciBpOj0xIHRvIG4gZG8KICAgICAgICAgICAgICAgIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWlkaW5oW2ldOj10cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB3cml0ZWxuKHN0cGx0LTEpOwogICAgICAgICAgICAgICAgICAgICAgICBsb2FpZGluaFtpXTo9ZmFsc2U7CiAgICAgICAgICAgICAgICBlbmQ7CmVuZDsKCmJlZ2luCiAgICAgICAgZG9jZmlsZTsKICAgICAgICB4dWxpOw==
compilation info
Free Pascal Compiler version 2.6.4+dfsg-6 [2015/05/31] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Linux for i386
Compiling prog.pas
prog.pas(45,11) Note: Local variable "j" not used
prog.pas(47,9) Note: Local variable "dem" not used
prog.pas(120,13) Fatal: Unexpected end of file
Fatal: Compilation aborted
Error: /usr/bin/ppc386 returned an error exitcode (normal if you did not specify a source file to be compiled)
stdout