#line 1 "verify/number-theory/LC_enumerate_quotients.test.cpp"
#define PROBLEM "https://judge.yosupo.jp/problem/enumerate_quotients"
#line 2 "template/template.hpp"
#include <bits/stdc++.h>
using namespace std ;
#line 2 "template/macro.hpp"
#define rep(i, a, b) for (int i = (a); i < (int)(b); i++)
#define rrep(i, a, b) for (int i = (int)(b) - 1; i >= (a); i--)
#define ALL(v) (v).begin(), (v).end()
#define UNIQUE(v) sort(ALL(v)), (v).erase(unique(ALL(v)), (v).end())
#define SZ(v) (int)v.size()
#define MIN(v) *min_element(ALL(v))
#define MAX(v) *max_element(ALL(v))
#define LB(v, x) int(lower_bound(ALL(v), (x)) - (v).begin())
#define UB(v, x) int(upper_bound(ALL(v), (x)) - (v).begin())
#define YN(b) cout << ((b) ? "YES" : "NO") << "\n";
#define Yn(b) cout << ((b) ? "Yes" : "No") << "\n";
#define yn(b) cout << ((b) ? "yes" : "no") << "\n";
#line 6 "template/template.hpp"
#line 2 "template/util.hpp"
using uint = unsigned int ;
using ll = long long int ;
using ull = unsigned long long ;
using i128 = __int128_t ;
using u128 = __uint128_t ;
template < class T , class S = T >
S SUM ( const vector < T > & a ) {
return accumulate ( ALL ( a ), S ( 0 ));
}
template < class T >
inline bool chmin ( T & a , T b ) {
if ( a > b ) {
a = b ;
return true ;
}
return false ;
}
template < class T >
inline bool chmax ( T & a , T b ) {
if ( a < b ) {
a = b ;
return true ;
}
return false ;
}
template < class T >
int popcnt ( T x ) {
return __builtin_popcountll ( x );
}
template < class T >
int topbit ( T x ) {
return ( x == 0 ? - 1 : 63 - __builtin_clzll ( x ));
}
template < class T >
int lowbit ( T x ) {
return ( x == 0 ? - 1 : __builtin_ctzll ( x ));
}
#line 8 "template/template.hpp"
#line 2 "template/inout.hpp"
struct Fast {
Fast () {
cin . tie ( nullptr );
ios_base :: sync_with_stdio ( false );
cout << fixed << setprecision ( 15 );
}
} fast ;
template < class T1 , class T2 >
istream & operator >> ( istream & is , pair < T1 , T2 > & p ) {
return is >> p . first >> p . second ;
}
template < class T1 , class T2 >
ostream & operator << ( ostream & os , const pair < T1 , T2 > & p ) {
return os << p . first << " " << p . second ;
}
template < class T >
istream & operator >> ( istream & is , vector < T > & a ) {
for ( auto & v : a ) is >> v ;
return is ;
}
template < class T >
ostream & operator << ( ostream & os , const vector < T > & a ) {
for ( auto it = a . begin (); it != a . end ();) {
os << * it ;
if ( ++ it != a . end ()) os << " " ;
}
return os ;
}
template < class T >
ostream & operator << ( ostream & os , const set < T > & st ) {
os << "{" ;
for ( auto it = st . begin (); it != st . end ();) {
os << * it ;
if ( ++ it != st . end ()) os << "," ;
}
os << "}" ;
return os ;
}
template < class T1 , class T2 >
ostream & operator << ( ostream & os , const map < T1 , T2 > & mp ) {
os << "{" ;
for ( auto it = mp . begin (); it != mp . end ();) {
os << it -> first << ":" << it -> second ;
if ( ++ it != mp . end ()) os << "," ;
}
os << "}" ;
return os ;
}
void in () {}
template < typename T , class ... U >
void in ( T & t , U & ... u ) {
cin >> t ;
in ( u ...);
}
void out () { cout << " \n " ; }
template < typename T , class ... U , char sep = ' ' >
void out ( const T & t , const U & ... u ) {
cout << t ;
if ( sizeof ...( u )) cout << sep ;
out ( u ...);
}
#line 10 "template/template.hpp"
#line 2 "template/debug.hpp"
#ifdef LOCAL
#define debug 1
#define show(...) _show(0, #__VA_ARGS__, __VA_ARGS__)
#else
#define debug 0
#define show(...) true
#endif
template < class T >
void _show ( int i , T name ) {
cerr << '\n' ;
}
template < class T1 , class T2 , class ... T3 >
void _show ( int i , const T1 & a , const T2 & b , const T3 & ... c ) {
for (; a [ i ] != ',' && a [ i ] != '\0' ; i ++ ) cerr << a [ i ];
cerr << ":" << b << " " ;
_show ( i + 1 , a , c ...);
}
#line 2 "number-theory/enumerate-quotients.hpp"
#line 2 "math/util.hpp"
namespace Math {
template < class T >
T safe_mod ( T a , T b ) {
assert ( b != 0 );
if ( b < 0 ) a = - a , b = - b ;
a %= b ;
return a >= 0 ? a : a + b ;
}
template < class T >
T floor ( T a , T b ) {
assert ( b != 0 );
if ( b < 0 ) a = - a , b = - b ;
return a >= 0 ? a / b : ( a + 1 ) / b - 1 ;
}
template < class T >
T ceil ( T a , T b ) {
assert ( b != 0 );
if ( b < 0 ) a = - a , b = - b ;
return a > 0 ? ( a - 1 ) / b + 1 : a / b ;
}
long long isqrt ( long long n ) {
if ( n <= 0 ) return 0 ;
long long x = sqrt ( n );
while (( x + 1 ) * ( x + 1 ) <= n ) x ++ ;
while ( x * x > n ) x -- ;
return x ;
}
// return g=gcd(a,b)
// a*x+b*y=g
// - b!=0 -> 0<=x<|b|/g
// - b=0 -> ax=g
template < class T >
T ext_gcd ( T a , T b , T & x , T & y ) {
T a0 = a , b0 = b ;
bool sgn_a = a < 0 , sgn_b = b < 0 ;
if ( sgn_a ) a = - a ;
if ( sgn_b ) b = - b ;
if ( b == 0 ) {
x = sgn_a ? - 1 : 1 ;
y = 0 ;
return a ;
}
T x00 = 1 , x01 = 0 , x10 = 0 , x11 = 1 ;
while ( b != 0 ) {
T q = a / b , r = a - b * q ;
x00 -= q * x01 ;
x10 -= q * x11 ;
swap ( x00 , x01 );
swap ( x10 , x11 );
a = b , b = r ;
}
x = x00 , y = x10 ;
if ( sgn_a ) x = - x ;
if ( sgn_b ) y = - y ;
if ( b0 != 0 ) {
a0 /= a , b0 /= a ;
if ( b0 < 0 ) a0 = - a0 , b0 = - b0 ;
T q = x >= 0 ? x / b0 : ( x + 1 ) / b0 - 1 ;
x -= b0 * q ;
y += a0 * q ;
}
return a ;
}
template < class T >
T inv_mod ( T x , T m ) {
x %= m ;
if ( x < 0 ) x += m ;
T a = m , b = x ;
T y0 = 0 , y1 = 1 ;
while ( b > 0 ) {
T q = a / b ;
swap ( a -= q * b , b );
swap ( y0 -= q * y1 , y1 );
}
if ( y0 < 0 ) y0 += m / a ;
return y0 ;
}
template < class T >
T pow_mod ( T x , T n , T m ) {
x = ( x % m + m ) % m ;
T y = 1 ;
while ( n ) {
if ( n & 1 ) y = y * x % m ;
x = x * x % m ;
n >>= 1 ;
}
return y ;
}
constexpr long long pow_mod_constexpr ( long long x , long long n , int m ) {
if ( m == 1 ) return 0 ;
unsigned int _m = ( unsigned int )( m );
unsigned long long r = 1 ;
unsigned long long y = x % m ;
if ( y >= m ) y += m ;
while ( n ) {
if ( n & 1 ) r = ( r * y ) % _m ;
y = ( y * y ) % _m ;
n >>= 1 ;
}
return r ;
}
}; // namespace Math
#line 4 "number-theory/enumerate-quotients.hpp"
namespace EnumerateQuotients {
using i64 = int64_t ;
i64 div ( i64 a , i64 b ) { return double ( a ) / b ; };
vector < i64 > table ( i64 N ) {
i64 sq = Math :: isqrt ( N );
vector < i64 > xs ( sq );
iota ( xs . begin (), xs . end (), 1 );
if ( N <= 1e12 ) {
for ( i64 i = div ( N , sq + 1 ); i > 0 ; i -- ) xs . push_back ( div ( N , i ));
} else {
for ( i64 i = N / ( sq + 1 ); i > 0 ; i -- ) xs . push_back ( N / i );
}
return xs ;
}
pair < i64 , i64 > get_range ( i64 N , i64 q ) {
return N <= 1e12 ? pair < i64 , i64 > { div ( N , q + 1 ), div ( N , q )} : pair < i64 , i64 > { N / ( q + 1 ), N / q };
}
template < class F >
void iterate ( i64 N , F f ) {
i64 sq = Math :: isqrt ( N );
vector < i64 > xs ;
if ( N <= 1e12 ) {
i64 x = N ;
for ( i64 q = 1 ; x <= sq ; q ++ ) {
i64 y = div ( N , q + 1 );
f ( q , y , x );
x = y ;
}
for (; x > 0 ; x -- ) f ( div ( N , x ), x - 1 , x );
} else {
i64 x = N ;
for ( i64 q = 1 ; x <= sq ; q ++ ) {
i64 y = N / ( q + 1 );
f ( q , y , x );
x = y ;
}
for (; x > 0 ; x -- ) f ( N / x , x - 1 , x );
}
}
}; // namespace EnumerateQuotients
/**
* @brief 商の列挙
* @docs docs/number-theory/enumerate-quotients.md
*/
#line 5 "verify/number-theory/LC_enumerate_quotients.test.cpp"
int main () {
ll n ;
in ( n );
auto qs = EnumerateQuotients :: table ( n );
out ( qs . size ());
out ( qs );
}