#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i,n,m) for(ll (i)=(n);(i)<(m);(i)++) #define rrep(i,n,m) for(ll (i)=(n);(i)>(m);(i)--) using ll = long long; using ld = long double; const ll mod = 1000000007; const ll inf = 1000000000; const ll INF = 1e15; void pline(vector lis){ rep(i,0,lis.size()){ printf ("%lld",lis[i]); if (i != lis.size()-1) printf(" "); else printf("\n"); } } void plineendl(vector lis){ rep(i,0,lis.size()){ cout << lis[i] << " "; } cout << endl; } ll llmin(ll x , ll y){ if ( x < y ) return x; else return y; } vector solve(ll a, ll b, ll c){ vector ret(0); if (a == 0 && b == 0 && c == 0){ ret.push_back(INF); }else if (a == 0 && b == 0){ //なにもしない }else if (a == 0){ ret.push_back(-(ld)c/ (ld)b); }else{ ll kai = b*b - 4*a*c; if (kai < 0){ //なにもしない }else if (kai == 0){ ret.push_back(-b/((ld)2*a)); }else{ ld sq = sqrt((double)kai); ret.push_back( (-b+sq)/(2*a) ); ret.push_back( (-b-sq)/(2*a) ); } } return ret; } int main(){ ll a,b,c; scanf("%lld%lld%lld",&a,&b,&c); auto ans = solve(a,b,c); if (ans.size() == 0){ cout << 0 << endl; }else if (ans[0] == INF){ cout << -1 << endl; }else{ sort(ans.begin(),ans.end()); cout << ans.size() << endl; rep(i,0,ans.size()){ cout << std::setprecision(13) << ans[i] << endl; } } } /* int main(){ ll N,R; scanf("%lld%lld",&N,R); vector> xy; rep(i,0,N){ ll x,y; scanf("%lld%lld",&x,&y); xy.push_back({x,y}); } //線分はいいが、内外判定がきついな rep(i,0,N){ rep } vector> stime(N+1,vector (N+1,1e9)); vector> etime(N+1,vector (N+1,1e9)); rep(i,0,N){ rep(j,0,i){ ll X = P[j][0]- P[i][0]; ll Y = P[j][1]- P[i][1]; ll VX = P[j][2]-P[i][2]; ll VY = P[j][3]-P[i][3]; // まず、直線の式を算出 //時刻 tが直接二次方程式の解になる vector time = solve(vx*vx+vy*vy, 2*x*vx+2*y*vy, x*x+y*y-D*D); printf ("vertices = %lld %lld\n",i,j); pline(time); } } } */ /* */