/* Team name: Omega
* Problem name: Template
*/
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
using namespace std;
#define SZ(a) int((a).size())
#define PB push_back
#define ALL(c) (c).begin(),(c).end()
#define LLA(A) A.rbegin(), A.rend()
#define CPY(A, B) memcpy(A, B, sizeof(A))
#define BSC(A, x) (lower_bound(ALL(A), x) - A.begin())
#define PRESENT(c,x) ((c).find(x) != (c).end())
#define CPRESENT(c,x) (find(all(c),x) != (c).end()) // present in a container or not.
#define MP make_pair
#define REP(i,n) for(int _n=n, i=0;i<_n;++i)
#define REP1(i,n) for(int _n=n, i=1;i<=_n;++i)
#define FOR(i,a,b) for(int i=(a),_b=(b);i<_b;++i)
#define FOREACH(it,c) for(typeof((c).begin()) it=(c).begin();it!=(c).end();++it)
#define FF first
#define SS second
#define INPUT(a) freopen (a, "r", stdin)
#define OUTPUT(a) freopen (a, "w", stdout)
#define FORD(i, b, a) for (int i=int(b-1);i>=int(a);--i)
#define FILL(a, v) memset(a, v, sizeof(a));
#define DREP(a) sort(ALL(a)); a.erase(unique(ALL(a)),a.end()) // will make the vector unique and sorted order
#define DEBUG(args...) {dbg,args; cerr<<endl;}
#define INF (int)1e9
#define LINF (long long)1e18
typedef long long LL;
typedef long double LD;
typedef vector < int > VI;
typedef vector < LL> VLL;
typedef vector < double > VD;
typedef vector< string> VS;
typedef vector < VI> VVI;
typedef pair < int ,int > PII;
typedef pair < LL,LL> PLL;
typedef vector < PII > VPII;
typedef pair < double , double > PDD;
typedef vector < PDD> VPDD;
struct debugger { template < typename T> debugger& operator , ( const T& v) { cerr << v<< " " ; return * this ; } } dbg;
template < class T> string i2s( T x) { ostringstream o; o << x; return o.str ( ) ; }
VS splt( string s, char c = ' ' ) { VS rv; int p = 0 , np; while ( np = s.find ( c, p) , np >= 0 ) { if ( np ! = p) rv.PB ( s.substr ( p, np - p) ) ; p = np + 1 ; } if ( p < SZ( s) ) rv.PB ( s.substr ( p) ) ; return rv; }
void print( VI v, int sz = - 1 ) { if ( sz == - 1 ) sz = SZ( v) ; cerr << "[" ; if ( sz) cerr << v[ 0 ] ; FOR ( i, 1 , sz) cerr << ", " << v[ i] ; cerr << "]" << endl; }
void print( VD v, int sz = - 1 ) { if ( sz == - 1 ) sz = SZ( v) ; cerr << "[" ; if ( sz) cerr << v[ 0 ] ; FOR ( i, 1 , sz) cerr << ", " << v[ i] ; cerr << "]" << endl; }
void print( VS v, int sz = - 1 ) { if ( sz == - 1 ) sz = SZ( v) ; cerr << "[" ; if ( sz) cerr << v[ 0 ] ; FOR ( i, 1 , sz) cerr << ", " << v[ i] ; cerr << "]" << endl; }
void print ( PII v) { cerr << "{ " << v.FF << ", " << v.SS << " }" ; }
void print ( VPII v, int sz = - 1 ) { if ( sz == - 1 ) sz = SZ( v) ; cerr << "[ " ; if ( sz) print ( v[ 0 ] ) ; FOR ( i, 1 , sz) { cerr << ", " ; print ( v[ i] ) ; } cerr << "]" << endl; }
void print( VVI v, int sz1 = - 1 , int sz2 = - 1 ) { if ( sz1 == - 1 ) sz1 = SZ( v) ; if ( sz2 == - 1 ) sz2 = SZ( v[ 0 ] ) ; cerr << "[ ---" << endl; if ( sz1) cerr << " " , print( v[ 0 ] , sz2) ; FOR( i, 1 , sz1) cerr << " " , print( v[ i] , sz2) ; cerr << "--- ]\n " ; }
const double EPS = 1e-9 ;
const int MOD = int ( 1e9 ) + 7 ;
const double PI = acos ( - 1.0 ) ; //M_PI;
// Asy psyho says : Algo is more about pyschology and ability to stay focused during short amount of time.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Main Code Starts Now //
////////////////////////////////////////////////////////////////////////////////////////////////////////////
int gcd ( int a, int b) {
return b > 0 ? gcd ( b, a % b) : a;
}
const int N = 794898 ;
bool prime[ N + 5 ] ;
vector < vector < int > > divi ( N + 5 ) ;
bool visited[ N + 5 ] ;
void sieve ( ) {
FOR ( i, 2 , N + 1 ) {
prime[ i] = true ;
}
for ( int i = 2 ; i * i <= N; i++ )
if ( prime[ i] ) {
for ( int j = i + i; j <= N; j + = i) {
prime[ j] = false ;
}
}
for ( int i = 2 ; i <= N; i++ )
if ( prime [ i] )
for ( int j = i; j <= N; j + = i) {
if ( SZ( divi[ j] ) == 0 )
divi[ j] .PB ( i) ;
}
}
int Ans[ N] ;
int main( ) {
sieve( ) ;
vector < set< int > > st ( N + 5 ) ;
REP1 ( i, N) {
if ( prime[ i] )
for ( int j = i; j <= N; j + = i) {
st[ i] .insert ( j) ;
}
}
VI a;
a.PB ( 1 ) ;
a.PB ( 2 ) ;
visited[ 2 ] = true ;
set < int > :: iterator it;
REP ( i, N) {
int num = a[ SZ( a) - 1 ] ;
int mn = N, pos = 0 ;
REP ( j, SZ( divi[ num] ) ) {
int temp = divi[ num] [ j] ;
VI toRemove;
int ok = false ;
for ( it = st[ temp] .begin ( ) ; it ! = st[ temp] .end ( ) ; it++ ) {
if ( * it % temp == 0 ) {
if ( visited[ * it] ) {
toRemove.PB ( * it) ;
} else {
//toRemove.PB (*it);
//a.PB (*it);
ok = true ;
if ( * it < mn) {
mn = * it;
pos = temp;
}
//visited[*it] = true;
break ;
}
}
}
REP ( k, SZ( toRemove) ) {
st[ temp] .erase ( toRemove[ k] ) ;
}
}
a.PB ( mn) ;
st[ pos] .erase ( mn) ;
visited[ mn] = true ;
}
REP ( i, SZ( a) ) {
Ans[ a[ i] ] = i + 1 ;
}
//cout << *max_element (Ans, Ans + 300000) << endl;
//print (a, 25);
int n;
while ( 1 ) {
scanf ( "%d" , & n) ;
if ( n == 0 ) break ;
printf ( "The number %d appears in location %d.\n " , n, Ans[ n] ) ;
}
return 0 ;
}
LyogVGVhbSBuYW1lOiBPbWVnYQoqICBQcm9ibGVtIG5hbWU6IFRlbXBsYXRlCiovCiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxsaXN0PgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8Yml0c2V0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y3N0cmluZz4KIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiNkZWZpbmUgU1ooYSkgaW50KChhKS5zaXplKCkpCiNkZWZpbmUgUEIgcHVzaF9iYWNrCiNkZWZpbmUgQUxMKGMpIChjKS5iZWdpbigpLChjKS5lbmQoKQojZGVmaW5lIExMQShBKSBBLnJiZWdpbigpLCBBLnJlbmQoKQojZGVmaW5lIENQWShBLCBCKSBtZW1jcHkoQSwgQiwgc2l6ZW9mKEEpKQojZGVmaW5lIEJTQyhBLCB4KSAobG93ZXJfYm91bmQoQUxMKEEpLCB4KSAtIEEuYmVnaW4oKSkKI2RlZmluZSBQUkVTRU5UKGMseCkgKChjKS5maW5kKHgpICE9IChjKS5lbmQoKSkKI2RlZmluZSBDUFJFU0VOVChjLHgpIChmaW5kKGFsbChjKSx4KSAhPSAoYykuZW5kKCkpIC8vIHByZXNlbnQgaW4gYSBjb250YWluZXIgb3Igbm90LgojZGVmaW5lIE1QIG1ha2VfcGFpcgojZGVmaW5lIFJFUChpLG4pIGZvcihpbnQgX249biwgaT0wO2k8X247KytpKQojZGVmaW5lIFJFUDEoaSxuKSBmb3IoaW50IF9uPW4sIGk9MTtpPD1fbjsrK2kpCiNkZWZpbmUgRk9SKGksYSxiKSBmb3IoaW50IGk9KGEpLF9iPShiKTtpPF9iOysraSkKI2RlZmluZSBGT1JFQUNIKGl0LGMpIGZvcih0eXBlb2YoKGMpLmJlZ2luKCkpIGl0PShjKS5iZWdpbigpO2l0IT0oYykuZW5kKCk7KytpdCkKI2RlZmluZSBGRiBmaXJzdAojZGVmaW5lIFNTIHNlY29uZAojZGVmaW5lIElOUFVUKGEpIGZyZW9wZW4gKGEsICJyIiwgc3RkaW4pCiNkZWZpbmUgT1VUUFVUKGEpIGZyZW9wZW4gKGEsICJ3Iiwgc3Rkb3V0KQojZGVmaW5lIEZPUkQoaSwgYiwgYSkgZm9yIChpbnQgaT1pbnQoYi0xKTtpPj1pbnQoYSk7LS1pKQojZGVmaW5lIEZJTEwoYSwgdikgbWVtc2V0KGEsIHYsIHNpemVvZihhKSk7CiNkZWZpbmUgRFJFUChhKSAgICAgICAgICAgICAgICAgc29ydChBTEwoYSkpOyBhLmVyYXNlKHVuaXF1ZShBTEwoYSkpLGEuZW5kKCkpIC8vIHdpbGwgbWFrZSB0aGUgdmVjdG9yIHVuaXF1ZSBhbmQgc29ydGVkIG9yZGVyCiNkZWZpbmUgREVCVUcoYXJncy4uLikgICAgICAgICAge2RiZyxhcmdzOyBjZXJyPDxlbmRsO30KI2RlZmluZSBJTkYgICAgICAgICAgICAgICAgICAgICAoaW50KTFlOQojZGVmaW5lIExJTkYgICAgICAgICAgICAgICAgICAgIChsb25nIGxvbmcpMWUxOAoKdHlwZWRlZiBsb25nIGxvbmcgTEw7CnR5cGVkZWYgbG9uZyBkb3VibGUgTEQ7CnR5cGVkZWYgdmVjdG9yIDxpbnQ+IFZJOwp0eXBlZGVmIHZlY3RvciA8TEw+IFZMTDsKdHlwZWRlZiB2ZWN0b3IgPGRvdWJsZT4gVkQ7CnR5cGVkZWYgdmVjdG9yPHN0cmluZz4gVlM7CnR5cGVkZWYgdmVjdG9yIDxWST4gVlZJOwp0eXBlZGVmIHBhaXIgPGludCxpbnQ+IFBJSTsKdHlwZWRlZiBwYWlyIDxMTCxMTD4gUExMOwp0eXBlZGVmIHZlY3RvciA8UElJID4gVlBJSTsKdHlwZWRlZiBwYWlyIDxkb3VibGUsIGRvdWJsZT4gUEREOwp0eXBlZGVmIHZlY3RvciA8UEREPiBWUEREOwoKc3RydWN0IGRlYnVnZ2VyIHsgdGVtcGxhdGU8dHlwZW5hbWUgVD4gZGVidWdnZXImIG9wZXJhdG9yICwgKGNvbnN0IFQmIHYpIHsgIGNlcnI8PHY8PCIgIjsgICAgcmV0dXJuICp0aGlzOyAgfSB9IGRiZzsKCnRlbXBsYXRlPGNsYXNzIFQ+IHN0cmluZyBpMnMoVCB4KSB7b3N0cmluZ3N0cmVhbSBvOyBvIDw8IHg7IHJldHVybiBvLnN0cigpOyB9ClZTIHNwbHQoc3RyaW5nIHMsIGNoYXIgYyA9ICcgJykge1ZTIHJ2OyBpbnQgcCA9IDAsIG5wOyB3aGlsZSAobnAgPSBzLmZpbmQoYywgcCksIG5wID49IDApIHtpZiAobnAgIT0gcCkgcnYuUEIocy5zdWJzdHIocCwgbnAgLSBwKSk7IHAgPSBucCArIDE7fSBpZiAocCA8IFNaKHMpKSBydi5QQihzLnN1YnN0cihwKSk7IHJldHVybiBydjt9Cgp2b2lkIHByaW50KFZJIHYsIGludCBzeiA9IC0xKSB7IGlmIChzeiA9PSAtMSkgc3ogPSBTWih2KTsgY2VyciA8PCAiWyI7IGlmIChzeikgY2VyciA8PCB2WzBdOyBGT1IgKGksIDEsIHN6KSBjZXJyIDw8ICIsICIgPDwgdltpXTsgY2VyciA8PCAiXSIgPDwgZW5kbDsgfQp2b2lkIHByaW50KFZEIHYsIGludCBzeiA9IC0xKSB7IGlmIChzeiA9PSAtMSkgc3ogPSBTWih2KTsgY2VyciA8PCAiWyI7IGlmIChzeikgY2VyciA8PCB2WzBdOyBGT1IgKGksIDEsIHN6KSBjZXJyIDw8ICIsICIgPDwgdltpXTsgY2VyciA8PCAiXSIgPDwgZW5kbDsgfQp2b2lkIHByaW50KFZTIHYsIGludCBzeiA9IC0xKSB7IGlmIChzeiA9PSAtMSkgc3ogPSBTWih2KTsgY2VyciA8PCAiWyI7IGlmIChzeikgY2VyciA8PCB2WzBdOyBGT1IgKGksIDEsIHN6KSBjZXJyIDw8ICIsICIgPDwgdltpXTsgY2VyciA8PCAiXSIgPDwgZW5kbDsgfQp2b2lkIHByaW50IChQSUkgdikgeyBjZXJyIDw8ICJ7ICIgPDwgdi5GRiA8PCAiLCAiIDw8IHYuU1MgPDwgIiB9IjsgfQp2b2lkIHByaW50IChWUElJIHYsIGludCBzeiA9IC0xKSB7IGlmIChzeiA9PSAtMSkgc3ogPSBTWih2KTsgY2VyciA8PCAiWyAiOyBpZiAoc3opIHByaW50ICh2WzBdKTsgRk9SIChpLCAxLCBzeikgeyBjZXJyIDw8ICIsICI7IHByaW50ICh2W2ldKTt9IGNlcnIgPDwgIl0iIDw8IGVuZGw7fQp2b2lkIHByaW50KFZWSSB2LCBpbnQgc3oxID0gLTEsIGludCBzejIgPSAtMSkgeyBpZiAoc3oxID09IC0xKSBzejEgPSBTWih2KTsgaWYgKHN6MiA9PSAtMSkgc3oyID0gU1oodlswXSk7IGNlcnIgPDwgIlsgLS0tIiA8PCBlbmRsO2lmIChzejEpIGNlcnIgPDwgIiAiLCBwcmludCh2WzBdLCBzejIpO0ZPUihpLCAxLCBzejEpIGNlcnIgPDwgIiAiLCBwcmludCh2W2ldLCBzejIpOyAgICBjZXJyIDw8ICItLS0gXVxuIjt9Cgpjb25zdCBkb3VibGUgRVBTID0gMWUtOTsKY29uc3QgaW50IE1PRCA9IGludCgxZTkpICsgNzsKY29uc3QgZG91YmxlIFBJID0gYWNvcygtMS4wKTsgLy9NX1BJOwovLyBBc3kgcHN5aG8gc2F5cyA6IEFsZ28gaXMgbW9yZSBhYm91dCBweXNjaG9sb2d5IGFuZCBhYmlsaXR5IHRvIHN0YXkgZm9jdXNlZCBkdXJpbmcgc2hvcnQgYW1vdW50IG9mIHRpbWUuCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWluIENvZGUgU3RhcnRzIE5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KaW50IGdjZCAoaW50IGEsIGludCBiKSB7CiAgICByZXR1cm4gYiA+IDAgPyBnY2QgKGIsIGEgJSBiKSA6IGE7Cn0KCmNvbnN0IGludCBOID0gNzk0ODk4Owpib29sIHByaW1lW04gKyA1XTsKdmVjdG9yIDx2ZWN0b3IgPGludCA+ID4gZGl2aSAoTiArIDUpOwpib29sIHZpc2l0ZWRbTiArIDVdOwoKdm9pZCBzaWV2ZSAoKSB7CiAgICBGT1IgKGksIDIsIE4gKyAxKSB7CiAgICAgICAgcHJpbWVbaV0gPSB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDI7IGkgKiBpIDw9IE47IGkrKykKICAgICAgICBpZiAocHJpbWVbaV0pIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IGkgKyBpOyBqIDw9IE47IGogKz0gaSkgewogICAgICAgICAgICAgICAgcHJpbWVbal0gPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IE47IGkrKykKICAgICAgICBpZiAocHJpbWUgW2ldKQogICAgICAgICAgICBmb3IgKGludCBqID0gaTsgaiA8PSBOOyBqICs9IGkpIHsKICAgICAgICAgICAgICAgIGlmIChTWihkaXZpW2pdKSA9PSAwKSAKICAgICAgICAgICAgICAgIAlkaXZpW2pdLlBCIChpKTsKICAgICAgICAgICAgfQp9CgppbnQgQW5zW05dOwoKaW50IG1haW4oKSB7CiAgICBzaWV2ZSgpOwogICAgCiAgICB2ZWN0b3IgPHNldDxpbnQ+ID4gc3QgKE4gKyA1KTsKICAgIFJFUDEgKGksIE4pIHsKICAgICAgICBpZiAocHJpbWVbaV0pCiAgICAgICAgICAgIGZvciAoaW50IGogPSBpOyBqIDw9IE47IGogKz0gaSkgewogICAgICAgICAgICAgICAgc3RbaV0uaW5zZXJ0IChqKTsKICAgICAgICAgICAgfQogICAgfQogICAgCiAgICBWSSBhOwogICAgYS5QQiAoMSk7CiAgICBhLlBCICgyKTsKICAgIHZpc2l0ZWRbMl0gPSB0cnVlOwogICAgCiAgICBzZXQgPGludD4gOjogaXRlcmF0b3IgaXQ7CiAgICBSRVAgKGksIE4pIHsKICAgICAgICBpbnQgbnVtID0gYVtTWihhKSAtIDFdOwogICAgICAgIGludCBtbiA9IE4sIHBvcyA9IDA7CiAgICAgICAgUkVQIChqLCBTWihkaXZpW251bV0pKSB7CiAgICAgICAgICAgIGludCB0ZW1wID0gZGl2aVtudW1dW2pdOwogICAgICAgICAgICBWSSB0b1JlbW92ZTsKICAgICAgICAgICAgaW50IG9rID0gZmFsc2U7CiAgICAgICAgICAgIGZvciAoaXQgPSBzdFt0ZW1wXS5iZWdpbigpOyBpdCAhPSBzdFt0ZW1wXS5lbmQoKTsgaXQrKykgewogICAgICAgICAgICAgICAgaWYgKCppdCAlIHRlbXAgPT0gMCkgewogICAgICAgICAgICAgICAgICAgIGlmICh2aXNpdGVkWyppdF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgdG9SZW1vdmUuUEIgKCppdCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy90b1JlbW92ZS5QQiAoKml0KTsKICAgICAgICAgICAgICAgICAgICAgICAgLy9hLlBCICgqaXQpOwogICAgICAgICAgICAgICAgICAgICAgICBvayA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqaXQgPCBtbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbW4gPSAqaXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSB0ZW1wOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIC8vdmlzaXRlZFsqaXRdID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIAogICAgICAgICAgICB9ICAgCiAgICAgICAgICAgIFJFUCAoaywgU1oodG9SZW1vdmUpKSB7CiAgICAgICAgICAgICAgICBzdFt0ZW1wXS5lcmFzZSAodG9SZW1vdmVba10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGEuUEIgKG1uKTsKICAgICAgICBzdFtwb3NdLmVyYXNlIChtbik7CiAgICAgICAgdmlzaXRlZFttbl0gPSB0cnVlOwogICAgfQogICAgCiAgICAKICAgIAogICAgUkVQIChpLCBTWihhKSkgewogICAgICAgIEFuc1thW2ldXSA9IGkgKyAxOwogICAgfQogICAgCiAgICAvL2NvdXQgPDwgKm1heF9lbGVtZW50IChBbnMsIEFucyArIDMwMDAwMCkgPDwgZW5kbDsKICAgIAogICAgLy9wcmludCAoYSwgMjUpOwogICAgCiAgICBpbnQgbjsKICAgIHdoaWxlICgxKSB7CiAgICAgICAgc2NhbmYgKCIlZCIsICZuKTsKICAgICAgICBpZiAobiA9PSAwKSBicmVhazsKICAgICAgICBwcmludGYgKCJUaGUgbnVtYmVyICVkIGFwcGVhcnMgaW4gbG9jYXRpb24gJWQuXG4iLCBuLCBBbnNbbl0pOwogICAgfQogICAgCgogICAgCiAgICByZXR1cm4gMDsKfQ==