#define ENABLE_DEBUG 1 // Kana's kitchen {{{ #include #define ALL(v) std::begin(v),std::end(v) #define LOOP(k) for(i64 ngtkana_is_a_genius=0; ngtkana_is_a_genius<(i64)k; ngtkana_is_a_genius++) using i32 = std::int_least32_t; using i64 = std::int_least64_t; using u32 = std::uint_least32_t; using u64 = std::uint_least64_t; using usize = std::size_t; template using pair = std::pair; template using diag_pair = std::pair; template using tuple = std::tuple; template using vec = std::vector; template using numr = std::numeric_limits; #ifdef NGTKANA #include #else #define DEBUG(...)(void)0 #endif /*}}}*/ // mint{{{ template struct modint { using value_type = typename ModType::value_type; using mint = modint; using mod_type = ModType; static value_type mod() { return ModType::value; } private: static value_type inverse(value_type x) { value_type y=1,u=mod(),v=0; while(x){ value_type q=u/x; u-=q*x; std::swap(x,u); v-=q*y; std::swap(y,v); } assert(x==0 && std::abs(y)==mod() && std::abs(u)==1 && std::abs(v) modint(T t) : value([t] () mutable { if ( t <= -static_cast(mod()) || static_cast(mod()) <= t ) t %= mod(); return t < 0 ? t + mod() : t; }()) {} // operators mint& operator+= (mint y) { value += y.value; if (mod() <= value) value -= mod(); return *this; } mint& operator-= (mint y) { value -= y.value; if ( value < 0 ) value += mod(); return *this; } mint& operator*= (mint y) { value = (long long)value * y.value % mod(); return *this; } mint& operator/= (mint y) { value = (long long)value * inverse(y.value) % mod(); return *this; } mint& operator++() { return *this+=1; } mint& operator--() { return *this-=1; } mint operator++(int) { mint this_=*this; ++*this; return this_; } mint operator--(int) { mint this_=*this; --*this; return this_; } // static member functions static mint inv(mint x) { return inverse(x.value); } static mint m1pow(long long y) { return y%2?-1:1; } static mint pow(mint x, unsigned long long y) { mint ans=1; for(;y;y>>=1){ if(y&1ull) ans*=x; x*=x; } return ans; } // non-member functions mint& add_assign(mint y) { return *this+=y; } mint& sub_assign(mint y) { return *this-=y; } mint& mul_assign(mint y) { return *this*=y; } mint& div_assign(mint y) { return *this/=y; } mint& inv_assign() { return *this = inv(*this); } mint& pow_assign(unsigned long long y){ return *this = pow(*this, y); } mint add(mint y) { mint ans=*this; return ans.add_assign(y); } mint sub(mint y) { mint ans=*this; return ans.sub_assign(y); } mint mul(mint y) { mint ans=*this; return ans.mul_assign(y); } mint div(mint y) { mint ans=*this; return ans.div_assign(y); } mint inv() { mint ans=*this; return ans.inv_assign(); } mint pow(unsigned long long y) { return pow(*this, y); } mint square(mint x) { return *this * *this; } mint cube(mint x) { return *this * *this * *this; } template mint map(F const& f){ value=f(value); return *this; } }; template std::istream& operator>>(std::istream& is, modint& x) { typename modint::value_type y; is >> y; x = modint{ y }; return is; } template std::ostream& operator<<(std::ostream& os, modint x) { return os << x.value; } template modint operator+(modint x, modint y) { return x+=y; } template modint operator-(modint x, modint y) { return x-=y; } template modint operator*(modint x, modint y) { return x*=y; } template modint operator/(modint x, modint y) { return x/=y; } template bool operator==(modint x, modint y) { return x.value==y.value; } template bool operator!=(modint x, modint y) { return x.value!=y.value; } template modint operator+(modint x, U y) { return x+modint(y); } template modint operator-(modint x, U y) { return x-modint(y); } template modint operator*(modint x, U y) { return x*modint(y); } template modint operator/(modint x, U y) { return x/modint(y); } template bool operator==(modint x, U y) { return x==modint(y); } template bool operator!=(modint x, U y) { return x!=modint(y); } template modint operator+(U x, modint y) { return modint(x)+y; } template modint operator-(U x, modint y) { return modint(x)-y; } template modint operator*(U x, modint y) { return modint(x)*y; } template modint operator/(U x, modint y) { return modint(x)/y; } template bool operator==(U x, modint y) { return modint(x)==y; } template bool operator!=(U x, modint y) { return modint(x)!=y; } /*}}}*/ using mint = modint>; int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); std::cout << std::setprecision(15) << std::fixed; usize d = 6; auto mul = [&](auto&& a, auto&& b) { assert(a.size()==d); assert(b.size()==d); vec c(2*d-1); for (usize i=0; i(d, 0); ans.at(0) = 1; return ans; }; auto pow = [&](auto&& a, i64 b) { auto ans = id(); for (; b; b>>=1) { if (b&i64{1}) ans = mul(ans, a); a = mul(a, a); } return ans; }; auto qinv = vec(d, mint{1} / d); i64 n; std::cin >> n; auto qinv_ton = pow(qinv, n); mint ans = qinv_ton.at(0); std::cout << ans << '\n'; }