#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ scanf(char *, int, int);
int main(void) {
  int i, j = 0, n, a, b, p1, p2, p3, p4;
  scanf("%d%d", i, n);
  p1 = i / 1000;
  p2 = i % 1000 / 100;
  p3 = i % 100 / 10;
  p4 = i % 10;
  if (p1 >= 1 && p1 <= n && p2 >= 1 && p2 <= n && p3 >= 1 && p3 <= n &&
      p4 >= 1 && p4 <= n && p1 != p2 && p1 != p3 && p1 != p4 && p2 != p3 &&
      p2 != p4 && p3 != p4) {
    printf("%d\t", i);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%esi
mov    -0x10(%rbp),%edx
lea    0xebd(%rip),%rdi
call   1040 <scanf@plt>
mov    -0x8(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%eax
mov    $0x3e8,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %eax,-0x20(%rbp)
mov    -0x8(%rbp),%eax
mov    $0x64,%ecx
cltd
idiv   %ecx
mov    %edx,%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %edx,-0x28(%rbp)
cmpl   $0x1,-0x1c(%rbp)
jl     1243 <main+0x123>
mov    -0x1c(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1243 <main+0x123>
cmpl   $0x1,-0x20(%rbp)
jl     1243 <main+0x123>
mov    -0x20(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1243 <main+0x123>
cmpl   $0x1,-0x24(%rbp)
jl     1243 <main+0x123>
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1243 <main+0x123>
cmpl   $0x1,-0x28(%rbp)
jl     1243 <main+0x123>
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jg     1243 <main+0x123>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
je     1243 <main+0x123>
mov    -0x1c(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1243 <main+0x123>
mov    -0x1c(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1243 <main+0x123>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1243 <main+0x123>
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1243 <main+0x123>
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     1243 <main+0x123>
mov    -0x8(%rbp),%esi
lea    0xdc7(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
lea    0xee8(%rip),%rdi
call   1030 <scanf@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@.str = [5 x i8] c"%d%d\00"
@.str.1 = [4 x i8] c"%d\09\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 0, i32* %1
store i32 0, i32* %3
%11 = load i32, i32* %2
%12 = load i32, i32* %4
%13 = call i32 @scanf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 %11, i32 %12)
%14 = load i32, i32* %2
%15 = sdiv i32 %14, 1000
store i32 %15, i32* %7
%16 = load i32, i32* %2
%17 = srem i32 %16, 1000
%18 = sdiv i32 %17, 100
store i32 %18, i32* %8
%19 = load i32, i32* %2
%20 = srem i32 %19, 100
%21 = sdiv i32 %20, 10
store i32 %21, i32* %9
%22 = load i32, i32* %2
%23 = srem i32 %22, 10
store i32 %23, i32* %10
%24 = load i32, i32* %7
%25 = icmp sge i32 %24, 1
br i1 %25, label %26, label %78
26: ; preds = %0
%27 = load i32, i32* %7
%28 = load i32, i32* %4
%29 = icmp sle i32 %27, %28
br i1 %29, label %30, label %78
30: ; preds = %26
%31 = load i32, i32* %8
%32 = icmp sge i32 %31, 1
br i1 %32, label %33, label %78
33: ; preds = %30
%34 = load i32, i32* %8
%35 = load i32, i32* %4
%36 = icmp sle i32 %34, %35
br i1 %36, label %37, label %78
37: ; preds = %33
%38 = load i32, i32* %9
%39 = icmp sge i32 %38, 1
br i1 %39, label %40, label %78
40: ; preds = %37
%41 = load i32, i32* %9
%42 = load i32, i32* %4
%43 = icmp sle i32 %41, %42
br i1 %43, label %44, label %78
44: ; preds = %40
%45 = load i32, i32* %10
%46 = icmp sge i32 %45, 1
br i1 %46, label %47, label %78
47: ; preds = %44
%48 = load i32, i32* %10
%49 = load i32, i32* %4
%50 = icmp sle i32 %48, %49
br i1 %50, label %51, label %78
51: ; preds = %47
%52 = load i32, i32* %7
%53 = load i32, i32* %8
%54 = icmp ne i32 %52, %53
br i1 %54, label %55, label %78
55: ; preds = %51
%56 = load i32, i32* %7
%57 = load i32, i32* %9
%58 = icmp ne i32 %56, %57
br i1 %58, label %59, label %78
59: ; preds = %55
%60 = load i32, i32* %7
%61 = load i32, i32* %10
%62 = icmp ne i32 %60, %61
br i1 %62, label %63, label %78
63: ; preds = %59
%64 = load i32, i32* %8
%65 = load i32, i32* %9
%66 = icmp ne i32 %64, %65
br i1 %66, label %67, label %78
67: ; preds = %63
%68 = load i32, i32* %8
%69 = load i32, i32* %10
%70 = icmp ne i32 %68, %69
br i1 %70, label %71, label %78
71: ; preds = %67
%72 = load i32, i32* %9
%73 = load i32, i32* %10
%74 = icmp ne i32 %72, %73
br i1 %74, label %75, label %78
75: ; preds = %71
%76 = load i32, i32* %2
%77 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 %76)
br label %78
78: ; preds = %75, %71, %67, %63, %59, %55, %51, %47, %44, %40, %37, %33, %30, %26, %0
ret i32 0
}

LLVM IR (-O2):
@.str = [5 x i8] c"%d%d\00"
define i32 @main() {
%1 = tail call i32 @scanf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 undef, i32 undef)
ret i32 0
}