从M+1开始枚举并判断是否为循环数
注意循环数的性质 数字各不相同 循环到每一个数位
{
ID: yaoyuan4
PROG: runround
LANG: PASCAL
}
Program runround;
const
inf = 'runround.in'; outf = 'runround.out';
var
m, ans : longint;
f : array[0..10] of longint;
Procedure init;
begin
assign(input, inf); reset(input);
readln(m);
close(input);
end;
Function ok(i : longint) : boolean;
var
a : array[0..9] of boolean;
begin
fillchar(f, sizeof(f), 0);
fillchar(a, sizeof(a), false);
repeat
inc(f[0]);
f[f[0]] := i mod 10;
if (a[i mod 10]) or (i mod 10 = 0) then exit(false) else a[i mod 10] := true;
i := i div 10;
until i = 0;
exit(true);
end;
Procedure work;
var
i, j, k, l, p, t : longint;
flag : boolean;
u : array[1..9] of boolean;
begin
i := m;
repeat
flag := false;
inc(i);
if ok(i) then
begin
fillchar(u, sizeof(u), false);
j := f[0];
t := f[0];
for p := 1 to f[0] do
begin
l := f[j];
if u[l] then break else
begin
u[l] := true;
dec(t);
end;
for k := 1 to l do
begin
dec(j);
if j = 0 then j := f[0];
end;
end;
if (j = f[0]) and (t = 0) then flag := true;
end;
until flag;
ans := i;
end;
Procedure print;
begin
assign(output, outf); rewrite(output);
writeln(ans);
close(output);
end;
begin
init;
work;
print;
end.