#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false);
#define ll long long int
#define PI 3.14159265
#define LIMIT 200000
#define cos2(x) cos ( x * PI / 180.0 )
#define sin2(x) sin ( x * PI / 180.0 )
using namespace std;
int main() {
int t;
ll n, q;
ll l, r;
cin >> t;
while(t--) {
cin >> n >> q;
char arr[n];
scanf("%s\n", &arr);
double cx[n], cy[n];
cx[0] = cos2((arr[0]-'0') * 60);
cy[0] = sin2((arr[0]-'0') * 60);
for (int i=1; i<n; i++) {
int d = arr[i]-'0';
cx[i] = cx[i-1] + cos2(d*60);
cy[i] = cy[i-1] + sin2(d*60);
}
while(q--) {
double x = 0, y = 0;
cin >> l >> r;
l -= 1;
r -= 1;
if (l >= n || r >= n || l < 0 || r < 0) {
// cout << "-1\n";
continue;
}
else {
if (l != 0) {
x = (cx[r] - cx[l-1]);
y = (cy[r] - cy[l-1]);
}
else {
x = cx[r];
y = cy[r];
}
cout << x << setprecision(8) << " " << y << setprecision(8) << endl;
}
};
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgSU9TIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CiNkZWZpbmUgUEkgMy4xNDE1OTI2NQojZGVmaW5lIExJTUlUIDIwMDAwMAojZGVmaW5lIGNvczIoeCkgY29zICggeCAqIFBJIC8gMTgwLjAgKQojZGVmaW5lIHNpbjIoeCkgc2luICggeCAqIFBJIC8gMTgwLjAgKQp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7ICAKCWludCB0OwoJbGwgbiwgcTsKCWxsIGwsIHI7CgkKCWNpbiA+PiB0OwoJCgl3aGlsZSh0LS0pIHsKCQljaW4gPj4gbiA+PiBxOwoJCWNoYXIgYXJyW25dOwoJCQoJCXNjYW5mKCIlc1xuIiwgJmFycik7CgkKCQlkb3VibGUgY3hbbl0sIGN5W25dOwoJCWN4WzBdID0gY29zMigoYXJyWzBdLScwJykgKiA2MCk7CgkJY3lbMF0gPSBzaW4yKChhcnJbMF0tJzAnKSAqIDYwKTsKCQkKCQlmb3IgKGludCBpPTE7IGk8bjsgaSsrKSB7CgkJCWludCBkID0gYXJyW2ldLScwJzsKCQkJY3hbaV0gPSBjeFtpLTFdICsgY29zMihkKjYwKTsKCQkJY3lbaV0gPSBjeVtpLTFdICsgc2luMihkKjYwKTsJCgkJfQoJCQoJCXdoaWxlKHEtLSkgewoJCQlkb3VibGUgeCA9IDAsIHkgPSAwOwoJCQljaW4gPj4gbCA+PiByOwoJCQkKCQkJbCAtPSAxOwoJCQlyIC09IDE7CgkJCQoJCQlpZiAobCA+PSBuIHx8IHIgPj0gbiB8fCBsIDwgMCB8fCByIDwgMCkgewoJCQkgLy8gICBjb3V0IDw8ICItMVxuIjsKCQkJICAgIGNvbnRpbnVlOwoJCQl9CgkJCQoJCQllbHNlIHsKICAgIAkJCWlmIChsICE9IDApIHsKICAgIAkJCQl4ID0gKGN4W3JdIC0gY3hbbC0xXSk7CiAgICAJCQkJeSA9IChjeVtyXSAtIGN5W2wtMV0pOwogICAgCQkJfQogICAgCQkJCiAgICAJCQllbHNlIHsKICAgIAkJCQl4ID0gY3hbcl07CiAgICAJCQkJeSA9IGN5W3JdOwkKICAgIAkJCX0KCQkJCgkJCSAgICBjb3V0IDw8IHggPDwgc2V0cHJlY2lzaW9uKDgpIDw8ICIgIiA8PCB5IDw8IHNldHByZWNpc2lvbig4KSA8PCBlbmRsOwoJCQl9CgkJfTsKCX0KCQoJcmV0dXJuIDA7Cn0=