#pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native") //#pragma comment(linker, "/stack:200000000") #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef double ld; typedef pair pii; typedef pair pll; typedef pair pdd; #define X first #define Y second //#include //using namespace boost; /* #include #include using namespace __gnu_pbds; typedef tree, rb_tree_tag, tree_order_statistics_node_update> rbtree; rbtree T; */ using i32 = int; using i64 = long long; using u8 = unsigned char; using u32 = unsigned; using u64 = unsigned long long; using f64 = double; using f80 = long double; //using i128 = __int128_t; //using u128 = __uint128_t; //using i128 = i64; //using u128 = u64; ll power(ll a, ll b, ll p) { if (!b) return 1; ll t = power(a, b/2, p); t = t*t%p; if (b&1) t = t*a%p; return t; } ll exgcd(ll a, ll b, ll &x, ll &y) { if (b == 0) { x = 1; y = 0; return a; } ll px, py; ll d = exgcd(b, a%b, px, py); x = py; y = px-a/b*py; return d; } template inline void freshmin(T &a, const T &b) { if (a > b) a = b; } template inline void freshmax(T &a, const T &b) { if (a < b) a = b; } template void print(const T &a) { for (auto x : a) printf("%d ", x); puts(""); } const int MAXN = 100010; //const i64 INF = 1000000000000000000LL; const int INF = 1000000000; //const int MOD = 998244353; const int MOD = 1000000007; const int INV2 = (MOD+1)/2; int main() { int T; scanf("%d", &T); while (T --) { int n; scanf("%d", &n); int sum = 0; for (int m = n; m; m /= 10) sum += m%10; vector ret; for (int i = 1; i <= sum; ++ i) if (sum%i == 0 && n%i == 0) ret.push_back(i); printf("%d\n", ret.size()); for (int i = 0; i < ret.size(); ++ i) { if (i) putchar(' '); printf("%d", ret[i]); } puts(""); } return 0; }