#include<bits/stdc++.h>
#define REP(i,n) for (int i = 1; i <= n; i++)
#define mod 1000000007
#define pb push_back
#define ff first
#define ss second
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<ii>
#define lli long long int
#define endl '\n'
using namespace std;
int b;
int fact[ 10 ] ;
void initFactorial( )
{
fact[ 0 ] = 1 ;
for ( int i= 1 ; i< 10 ; i++ )
fact[ i] = fact[ i- 1 ] * i;
}
bool isFactorian( int N)
{
int value = 0 ;
int temp = N;
while ( temp)
{
int current_digit = temp % b;
temp / = b;
value + = fact[ current_digit] ;
}
return value == N;
}
int getBiggestFactorian( int N)
{
for ( int i= N- 1 ; i>= 1 ; i-- )
if ( isFactorian( i) ) return i;
return - 1 ;
}
int main( )
{
initFactorial( ) ;
cin >> b;
cout << getBiggestFactorian( 1500000 ) ;
}
/*
it is more of an implementation problem , the toughest part of it will be to convert a given number in base 10 to base b (so you can understand this is not that difficult problem).
so here is how we can solve this problem.
1. pre calculate factorials from 0 to 9 (because we only need factorial of digits).
2. run a loop from 1500000 - 1 to 0 and check whether the current number is factorian number or not.
3. if the current number is factorian number stop the loop and print current number.
step 2 requires to check whether the given number is factorian number or not , for that you need to convert the current number from base 10 to base b after that you can easily check that.
I am providing the code , you can check the implementation details there.
*/
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBSRVAoaSxuKSBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDcKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSB2aSB2ZWN0b3I8aW50PgojZGVmaW5lIHZpaSB2ZWN0b3I8aWk+CiNkZWZpbmUgbGxpIGxvbmcgbG9uZyBpbnQKI2RlZmluZSBlbmRsICdcbicKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBiOwppbnQgZmFjdFsxMF07Cgp2b2lkIGluaXRGYWN0b3JpYWwoKQp7CglmYWN0WzBdID0gMTsKCWZvcihpbnQgaT0xO2k8MTA7aSsrKQoJZmFjdFtpXSA9IGZhY3RbaS0xXSAqIGk7Cn0KCmJvb2wgaXNGYWN0b3JpYW4oaW50IE4pCnsKCWludCB2YWx1ZSA9IDA7CglpbnQgdGVtcCA9IE47CgkKCXdoaWxlKHRlbXApCgl7CgkJaW50IGN1cnJlbnRfZGlnaXQgPSB0ZW1wICUgYjsKCQl0ZW1wIC89IGI7CgkJCgkJdmFsdWUgKz0gZmFjdFtjdXJyZW50X2RpZ2l0XTsKCX0KCQoJcmV0dXJuIHZhbHVlID09IE47Cn0KCmludCBnZXRCaWdnZXN0RmFjdG9yaWFuKGludCBOKQp7Cglmb3IoaW50IGk9Ti0xO2k+PTE7aS0tKQoJaWYoaXNGYWN0b3JpYW4oaSkpIHJldHVybiBpOwoJCglyZXR1cm4gLTE7Cn0KCmludCBtYWluKCkKewoJaW5pdEZhY3RvcmlhbCgpOwoJY2luPj5iOwoJY291dDw8Z2V0QmlnZ2VzdEZhY3RvcmlhbigxNTAwMDAwKTsKfQoKCgoKLyoKCml0IGlzIG1vcmUgb2YgYW4gaW1wbGVtZW50YXRpb24gcHJvYmxlbSAsIHRoZSB0b3VnaGVzdCBwYXJ0IG9mIGl0IHdpbGwgYmUgdG8gY29udmVydCBhIGdpdmVuIG51bWJlciBpbiBiYXNlIDEwIHRvIGJhc2UgYiAoc28geW91IGNhbiB1bmRlcnN0YW5kIHRoaXMgaXMgbm90IHRoYXQgZGlmZmljdWx0IHByb2JsZW0pLgoKc28gaGVyZSBpcyBob3cgd2UgY2FuIHNvbHZlIHRoaXMgcHJvYmxlbS4KCjEuIHByZSBjYWxjdWxhdGUgZmFjdG9yaWFscyBmcm9tIDAgdG8gOSAoYmVjYXVzZSB3ZSBvbmx5IG5lZWQgZmFjdG9yaWFsIG9mIGRpZ2l0cykuCgoyLiBydW4gYSBsb29wIGZyb20gMTUwMDAwMCAtIDEgdG8gMCBhbmQgY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBudW1iZXIgaXMgZmFjdG9yaWFuIG51bWJlciBvciBub3QuCgozLiBpZiB0aGUgY3VycmVudCBudW1iZXIgaXMgZmFjdG9yaWFuIG51bWJlciBzdG9wIHRoZSBsb29wIGFuZCBwcmludCBjdXJyZW50IG51bWJlci4KCnN0ZXAgMiByZXF1aXJlcyB0byBjaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBudW1iZXIgaXMgZmFjdG9yaWFuIG51bWJlciBvciBub3QgLCBmb3IgdGhhdCB5b3UgbmVlZCB0byBjb252ZXJ0IHRoZSBjdXJyZW50IG51bWJlciBmcm9tIGJhc2UgMTAgdG8gYmFzZSBiIGFmdGVyIHRoYXQgeW91IGNhbiBlYXNpbHkgY2hlY2sgdGhhdC4KCkkgYW0gcHJvdmlkaW5nIHRoZSBjb2RlICwgeW91IGNhbiBjaGVjayB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGVyZS4KCiov