using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Runtime.Intrinsics.Arm; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var p = NList; var (a, b, c) = (p[0], p[1], p[2]); if (a == 0) { if (b == 0) { if (c == 0) WriteLine(-1); else WriteLine(0); } else { WriteLine(1); WriteLine(- (double)c / b); } } else { if (b == 0) { if (c == 0) { WriteLine(1); WriteLine(0); } else if (c > 0) { WriteLine(0); } else { WriteLine(2); var ans = Math.Sqrt((double) c / a); WriteLine(-ans); WriteLine(ans); } } else { if (c == 0) { var ans = - (double) b / a; WriteLine(Math.Min(0, ans)); WriteLine(Math.Max(0, ans)); } else { var center = - b / 2.0 / a; if (a * center * center + b * center + c == 0) { WriteLine(1); WriteLine(center); } else if ((a > 0 && a * center * center + b * center + c > 0) || (a < 0 && a * center * center + b * center + c < 0)) { WriteLine(0); } else { var max = 4_000_000_000.0; double ans1; var d = 0.000_000_000_000_1; var left = -max; var right = center; while (right - left > d && Math.Abs((right - left) / right) > d) { var mid = (left + right) / 2; if (a > 0) { if (a * mid * mid + b * mid + c > 0) left = mid; else right = mid; } else { if (a * mid * mid + b * mid + c < 0) left = mid; else right = mid; } } ans1 = left; left = center; right = max; while (right - left > d && Math.Abs((right - left) / right) > d) { var mid = (left + right) / 2; if (a > 0) { if (a * mid * mid + b * mid + c < 0) left = mid; else right = mid; } else { if (a * mid * mid + b * mid + c > 0) left = mid; else right = mid; } } WriteLine(2); WriteLine(ans1.ToString("0.000000000000")); WriteLine(left.ToString("0.000000000000")); } } } } } }