#define _USE_MATH_DEFINES #include using namespace std; #define un unsigned #define ul unsigned long long #define ll long long #define ld long double #define vec vector #define mp make_pair #define aa first #define bb second #define pul pair #define pll pair #define in(v, c) ((c).find(v) != (c).end()) #define F(i, n) for(ll i = 0; i < (n); i++) #define Fun(i, n) for(ul i = 0; i < (n); i++) #ifdef GPP_DEBUG void __log(ostream&os){} templatevoid __log(ostream&os,F&&f,R&&...r){os<<' '<(f);__log(os,forward(r)...);} templatevoid lout(F&&f,R&&...r){cout<(f);__log(cout,forward(r)...);cout<void lerr(F&&f,R&&...r){cerr<(f);__log(cerr,forward(r)...);cerr<ostream& operator<<(ostream&os,const pair&p) {return os< arr; vec prefix; int main(int argc, char const *argv[]) { ios_base::sync_with_stdio(0); cin.tie(0); cin.exceptions(cin.failbit); cout << setprecision(9) << fixed; lerr("ready"); cin >> n; arr.resize(n); prefix.resize(n); // a[0..i] // na každé pozici musím vědět, kde je první součet x % 10 ll s = 0; F(i, n) { cin >> arr[i]; s += arr[i]; prefix[i] = s%10; lout("prefix", i, prefix[i]); } vec res(n); vec remIdx(10, -1); for(ll i = n; i-->0;) { remIdx[prefix[i]%10] = i; // lout("update", prefix[i]%10, i); ll offset = i > 0 ? prefix[i-1] : 0; ll t = remIdx[offset]; res[i] = t == -1 ? -1 : t-i+1; } for(ll a : res) cout << a << " "; cout << endl; return 0; }