#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFF = 0x3f3f3f3f3f3f3f3fll;
const long long M = 1e9 + 9;
const long long maxn = 4e5 + 7;
const double pi = acos(-1.0);
const double eps = 1e-10;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
template <typename T>
inline T abs(T a) {
  return a > 0 ? a : -a;
}
template <typename T>
inline T powMM(T a, T b) {
  T ret = 1;
  for (; b; b >>= 1ll, a = (long long)a * a % M)
    if (b & 1) ret = (long long)ret * a % M;
  return ret;
}
inline int dcmp(long double x) { return (x > eps) - (x < -eps); }
struct Point {
  long double x, y;
  Point(long double x = 0, long double y = 0) : x(x), y(y) {}
  void input() { cin >> x >> y; }
  bool operator<(const Point& R) const {
    if (dcmp(x - R.x) == 0) return dcmp(y - R.y) < 0;
    return dcmp(x - R.x) < 0;
  }
  bool operator==(const Point& R) const {
    return dcmp(x - R.x) == 0 && dcmp(y - R.y) == 0;
  }
  Point operator+(const Point& R) const { return Point(x + R.x, y + R.y); }
  Point operator-(const Point& R) const { return Point(x - R.x, y - R.y); }
  Point operator*(const long double& R) const { return Point(x * R, y * R); }
  Point operator/(const long double& R) const { return Point(x / R, y / R); }
  long double operator^(const Point& R) const { return x * R.y - y * R.x; }
  long double operator%(const Point& R) const { return x * R.x + y * R.y; }
  long double len() { return sqrt(*this % *this); }
  long double angle() { return atan2(y, x); }
} P[maxn], nowpos;
long double theta;
int n, m;
int main() {
  int i;
  int n, q;
  scanf("%d%d", &n, &q);
  for (i = 0; i < n; i++) P[i].input();
  Point middle;
  {
    long double all = 0;
    for (i = 2; i < n; i++) {
      long double now = (P[i - 1] - P[0]) ^ (P[i] - P[0]);
      middle = middle + (P[i - 1] + P[i]) * now;
      all = all + now;
    }
    middle = middle / all;
    middle = (middle + P[0]) / 3;
  }
  nowpos = middle;
  int nowpin = 1;
  theta = pi / 2;
  for (i = 0; i < q; i++) {
    int op;
    scanf("%d", &op);
    if (op == 1) {
      int f, t;
      scanf("%d%d", &f, &t);
      f--;
      t--;
      nowpin ^= f;
      int id = nowpin;
      Point Div = middle - P[id];
      long double alpha = Div.angle() + theta - pi / 2;
      Point Add = Point(Div.len() * cos(alpha), Div.len() * sin(alpha));
      Point ans = nowpos - Add;
      theta = -Div.angle();
      nowpos = ans + Point(0, -Div.len());
      nowpin ^= t;
    } else {
      int v;
      scanf("%d", &v);
      v--;
      Point Div = middle - P[v];
      long double alpha = Div.angle() + theta - pi / 2;
      Point Add = Point(Div.len() * cos(alpha), Div.len() * sin(alpha));
      Point ans = nowpos - Add;
      cout << fixed << setprecision(10) << ans.x << " " << ans.y << "\n";
    }
  }
  return 0;
}
